我必须使用 AES 算法在 J2ME 和 android 中加密相同的数据。
但加密结果不一样。我想产生相同的加密数据输出结果。
J2ME 代码:
public String Encrypt(String text, String key)
throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes= new byte[16];
byte[] b= key.getBytes("UTF-8");
int len= b.length;
if (len > keyBytes.length) len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes,0,keyBytes.length, "AES");
cipher.init(Cipher.ENCRYPT_MODE,keySpec, ivspec);
byte[] outputBytes = new byte[100];
byte[] inputBytes;
inputBytes=text.getBytes("UTF-8");
int results = cipher.doFinal(inputBytes,0,inputBytes.length,outputBytes,0);
String str = new String(outputBytes, 0, results);
String strMobile_No = Base64.encode(str.getBytes());
String strresult=strMobile_No.toString();
textField.setString(strMobile_No);
return strresult;
}
安卓代码:
private String Encrypt(String text, String key)
throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes= new byte[16];
byte[] b= key.getBytes("UTF-8");
int len= b.length;
if (len > keyBytes.length) len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivSpec);
byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
Log.v("GET Result from final:",results.toString());
strMobile_No = Base64.encodeToString(results, 1);
return strMobile_No;
}
J2ME 产生:85IV+rkwyE/oO6z7uvwKbw==
安卓产生:XYMqEaliHBykRXGqV4LawA
有人可以帮我修复我的代码吗?