我必须在Android应用中实现加密。 Web开发人员正在使用CryptoJs库。表示加密算法是AES256加密。
iOS和Android平台都提供不同的字符串,并且在web上接受iOS。对于示例字符串,它应该是相同的。
我正在使用下面的代码片段(有两种不同的不同功能):
((MainAcitivty)getActivity).test()
我也用过:
private void newEnc() {
String secret = "LSC@SD2017@ps";
String cipherText = "{\"device_type\":\"iOS\",\"email\" : \"jhon@gmail.com\",\"device_id\" : \"14105DA4-CEE5-431E-96A2-2331CDA7F062\",\"password\" : \"123456\",\"device_token\" : \"B44777563552882EC3139A0317E401B55D6FC699D0AC3D279F392927CAF9B566\"}";
KeyGenerator kgen = null;
try {
kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(secret.getBytes("UTF8"));
kgen.init(256, sr);
SecretKey skey = kgen.generateKey();
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec skeySpec = new SecretKeySpec(skey.getEncoded(), "AES");
c.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] decrypted = c.doFinal(cipherText.getBytes());
System.out.println(Base64.encodeToString(decrypted, Base64.NO_WRAP));
// decrypted = Base64.encodeBase64(decrypted);
// byte[] iv = Base64.encodeBase64(c.getIV());
// Log.e("encryptString", new String(decrypted));
// Log.d("encryptString iv", new String(iv));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
但没有人给出相同的结果。
在iOS中,他们正在使用https://github.com/etienne-martin/CryptoJS.swift
我应该怎么做才能使两个加密字符串匹配。
答案 0 :(得分:0)
实际的cipherText
(不要混淆具有相同变量名称的字符串)被格式化并以“Salted__”开头,并且可能是加密参数。两个不同的功能以不同的格式创建不同的输出。它们不能产生相同的输出。
注1,混淆cipherText
:
// String cipherText = "{\"device_type\":\"iOS\",\"email\" : \"jhon@gmail.com\",\"device_id\" : \"14105DA4-CEE5-431E-96A2-2331CDA7F062\",\"password\" : \"123456\",\"device_token\" : \"B44777563552882EC3139A0317E401B55D6FC699D0AC3D279F392927CAF9B566\"}";
// String cipherText = "U2FsdGVkX1+tsmZvCEFa/iGeSA0K7gvgs9KXeZKwbCDNCs2zPo+BXjvKYLrJutMK+hxTwl/hyaQLOaD7LLIRo2I5fyeRMPnroo6k8N9uwKk=";
注2:
Base64对人类来说是无用的,它专为计算机而设计,十六进制适用于人类和计算机,具有直接的位到字节的对应关系。