Java加密AES,PHP解密AES

时间:2016-10-15 19:19:23

标签: java php encryption cryptography aes

我一直在寻找一种在Java中加密字符串的方法,并在PHP中解密它。我在Stackoverflow的某个地方找到了this,我修改了它以完全相反。 这是我在Java中加密的代码:

build/
├── css/
│   └── font-awesome.min.css
└── fonts/
    ├── some-font-file.eot
    ├── some-font-file.svg
    ├── some-font-file.ttf
    ├── some-font-file.woff
    └── some-font-file.woff2

这是我在PHP中解密的代码:

public static String encrypt(String data, String initialVectorString, String secretKey) {
        String encryptedData = null;
        try {
            SecretKeySpec skeySpec = new SecretKeySpec(md5(secretKey).substring(0, 16).getBytes(), "AES");
            IvParameterSpec initialVector = new IvParameterSpec(initialVectorString.getBytes());
            Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, initialVector);
            byte[] encrypted = cipher.doFinal(data.getBytes());
            byte[] base64encrypted = (new org.apache.commons.codec.binary.Base64()).encode(encrypted);
            encryptedData = new String(base64encrypted, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return encryptedData;
    }

秘密密钥和初始向量每次都会改变。 代码在90%的情况下有效,但有时它只会部分解密字符串,其余字符不可读,如下所示:function decrypt($message, $initialVector, $secretKey) { return ( mcrypt_decrypt( MCRYPT_RIJNDAEL_128, substr(md5($secretKey), 0, 16), base64_decode($message), MCRYPT_MODE_CFB, $initialVector ) ); } 应该说Microsoft Windows [Version 10.0.1��×。我修改代码时犯了什么错误吗?

编辑:我可能需要使用上面链接的代码在Java中添加解密功能。​​

EDIT2:找到了答案,这是一个愚蠢的错误,PHP在base64加密字符串中得到了+作为空格。感谢您的所有帮助,我仍然会使用很多。

0 个答案:

没有答案