0
我必须使用AES算法在J2ME和android中加密相同的数据。为Java ME和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;
}
的Android代码:
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==
的Android生产:XYMqEaliHBykRXGqV4LawA
有人可以帮我解决我的代码?
这甚至没有编译。 J2ME代码中定义了“ivspec”?也有可怕的密码错误,可能会破坏整个事情的安全。 – ntoskrnl
ohh有错误... ivspec在上面的j2me函数中定义:private IvParameterSpec ivspec; – Bushra
足够公平......'ivpsec' *初始化*在哪里? – ntoskrnl