有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

PHP加密和解密方法到java的aes转换

我尝试将加密和解密函数转换为Java中用于以下PHP的函数。但收到非法密钥大小错误。建议我用java进行256比特AES解密

PHP代码

<?php
    function encrypt ($data,$salt) {
        $hash = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($salt), $data, MCRYPT_MODE_CBC, md5(md5($salt))));
        return $hash;
    }
    function decrypt ($encdata,$salt) {
        $string = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($salt), base64_decode($encdata), MCRYPT_MODE_CBC, md5(md5($salt)));
        return $string;
    }
?>

转换的Java代码:

//The below code found in http://www.logikdev.com/2010/11/01/encrypt-with-php-decrypt-with-java/
    public static String md5(String input) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(input.getBytes());
        BigInteger number = new BigInteger(1, messageDigest);
        return number.toString(16);
    }

    public String decrypt(String encryptedData) {
        String decryptedData = null;
        try {
            SecretKeySpec skeySpec = new SecretKeySpec(md5("5A17K3Y").getBytes(), "AES");           
            String initialVectorString=md5(md5("5A17K3Y"));
            IvParameterSpec initialVector = new IvParameterSpec(initialVectorString.getBytes());
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding","SunJCE");            
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, initialVector);          
            encryptedData=encryptedData.replace('-','+').replace('_','/').replace(',','=');
            byte[] encryptedByteArray = (new org.apache.commons.codec.binary.Base64()).decode((encryptedData.getBytes()));          
            byte[] decryptedByteArray = cipher.doFinal(encryptedByteArray);
            decryptedData = new String(decryptedByteArray, "UTF8");
        } catch (Exception e) {         
            System.out.println("Error. Problem decrypting the data: " + e);
        }
    }

Problem decrypting the data: java.security.InvalidKeyException: Illegal key size


共 (1) 个答案

  1. # 1 楼答案

    如果未安装无限强度文件,则会收到非法密钥大小错误。这些文件允许Java使用更强的密钥长度(例如256位AES)

    转到Oracle download site并查找与Java版本匹配的文件。如果在你的国家这样做是合法的,安装这些文件并享受更强的加密

    旁注:你有没有研究过这个问题?第一个upteem结果会回答你的问题