我正在尝试加密Android中的JSON字符串,并使用AESCrypt在Ruby中对其进行解密。
AESCrypt.decrypt(dataToDecrypt, secret)
使用这个Java代码,我可以解密后半部分的数据!
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(secret.getBytes("UTF-8"));
byte[] digest = md.digest();
SecretKeySpec newKey = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = null;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, newKey);
byte[] encryptedData = cipher.doFinal(textBytes);
String encryptedDataStr = Base64.encodeToString(encryptedData, Base64.DEFAULT)
原始数据是:
{ “DEVICE_ID”: “863438021956196”, “IMEI”: “863438021956196”}
Ruby中的解密数据是:
\ XEE \ X99 \ X95 \ xC5p \ X17 \ x8A \ XFB \ XF0 \ xA5 \ xC7 \ x1D7 \ X98 \ XBD \ xD93438021956196 \”,\ “IMEI \”:\ “863438021956196 \”}
有什么问题?
答案 0 :(得分:1)
CBC模式需要IV。未能明确指定您依赖默认值的那个。看起来默认的Java IV与Ruby代码的默认IV不同。不要使用默认值。
答案 1 :(得分:0)
我遇到了同样的问题,因为@GreyS提到默认的IV是不同的,AFAIK
如果你不提供,IV
Java会创建一个随机AESCrypt
。同样非常确定PKCS7Padding
使用AESCrypt
。无论如何,为了帮助我在{{1}}和Android之间工作,我最近创建了AESCrypt-Android