在Android中加密数据并使用AESCrypt在Ruby中解密

时间:2014-09-27 12:13:46

标签: android ruby encryption aes cbc-mode

我正在尝试加密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 \”}

有什么问题?

2 个答案:

答案 0 :(得分:1)

CBC模式需要IV。未能明确指定您依赖默认值的那个。看起来默认的Java IV与Ruby代码的默认IV不同。不要使用默认值。

答案 1 :(得分:0)

我遇到了同样的问题,因为@GreyS提到默认的IV是不同的,AFAIK如果你不提供,IV Java会创建一个随机AESCrypt。同样非常确定PKCS7Padding使用AESCrypt。无论如何,为了帮助我在{{1}}和Android之间工作,我最近创建了AESCrypt-Android