iOS Triple DES加密为Android生成不同的String

时间:2018-04-30 13:17:55

标签: android ios tripledes

我在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中的输出。

任何帮助将不胜感激。

0 个答案:

没有答案