我一直在寻找一种在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加密字符串中得到了+作为空格。感谢您的所有帮助,我仍然会使用很多。