我在Android应用中使用了TripleDES加密,并根据需要返回预期的字符串。但是,使用CommonCrypto在iOS中实现相同的功能时,返回的字符串与预期的不同。
v1.add(v2).sub(v3).add(v4).toString();
iOS代码
public String encrypt(String message, String secretKey) throws Exception {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] digestOfPassword = md.digest(secretKey.getBytes("utf-8"));
byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
for (int j = 0, k = 16; j < 8;) {
keyBytes[k++] = keyBytes[j++];
}
KeySpec keySpec = new DESedeKeySpec(keyBytes);
SecretKey key = SecretKeyFactory.getInstance("DESede").generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] plainTextBytes = message.getBytes("utf-8");
byte[] buf = cipher.doFinal(plainTextBytes);
byte[] base64Bytes = Base64.encodeBase64(buf);
String base64EncryptedString = new String(base64Bytes);
return base64EncryptedString;
}
注意使用的密钥是20字节密钥可能会有所帮助。我只限于20字节的密钥。 Android应用程序通过Array.copyOf函数自动处理这个限制,但是,尽管没有填充并重复键的第一个字符作为最后八个字符,我仍然无法复制iOS中的输出。
任何帮助将不胜感激。