[英]Implementing AES Encryption/Decryption around existing PHP System on Android
我正在将iOS项目扩展到Android。 我现有的应用程序使用AES加密系统通过PHP与服务器通信。
以下是我在PHP端使用的函数:
加密
function cryptAESEncrypt($string,$key) {
$key = md5($key);
$iv = "1234567890123436"; //IV isn't needed if MCRYPT_MODE is ECB (What we are using)
$data = $data = base64_encode($string);
$algorythm = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_ECB;
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$data,MCRYPT_MODE_ECB,$iv);
return base64_encode($encrypted);
}
解码
function cryptAESDecrypt($string,$key) {
$key = md5($key);
$iv = "1234567890123436"; //IV isn't needed if MCRYPT_MODE is ECB (What we are using)
$data = base64_decode($string);
$algorythm = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_ECB;
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$data,MCRYPT_MODE_ECB,$iv);
return base64_decode($decrypted);
}
该过程的一般流程是:
$key
(无论如何都将它降低到16个字符) $string
解密工作方式相同,但相反。
现在我只是在玩样品,但似乎没有太多运气。 我已经使用该函数在PHP中加密了字符串"test"
( "test"
也是关键 - MD5到098f6bcd4621d373cade4e832627b4f6
)并且我得到了"ijzLe/2WgbaP+n3YScQSgQ=="
。
现在我在Java中尝试的工作不起作用,因为我得到了一个不正确的密钥长度错误,但我之前的片段运气更幸运。 无论如何,这就是我所拥有的:
String key = "test";
String in = "ijzLe/2WgbaP+n3YScQSgQ==";
SecretKeySpec skeySpec = new SecretKeySpec(md5(key).getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encryptedByteArray = Base64.decode(in.getBytes(),0);
byte[] decryptedByteArray = cipher.doFinal(encryptedByteArray);
String decryptedData = new String(Base64.decode(decryptedByteArray, 0));
Log.v("NOTE","Data: "+decryptedData);
正如我所说,这不起作用。 现在我的问题是,是否有任何人可以帮助我使用提供的PHP代码使我的Java代码工作,因为我无法改变它(让其他代码使用不同的PHP代码段工作)。
感谢Duncan在评论中我发现问题出在我的MD5哈希函数上。
找到一个工作版本供参考:
public String md5(String s) {
if (s != null)
{
try { // Create MD5 Hash
MessageDigest digest = java.security.MessageDigest .getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++) {
String h = Integer.toHexString(0xFF & messageDigest[i]);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
return "";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.