如何在React-native中复制相同的Android加密方法?

时间:2019-06-27 07:53:26

标签: javascript java react-native cryptojs tripledes

我正在创建一个本机应用程序,在这里我需要使用ECB模式和Pkcs7填充使用TripleDES进行加密。 我有一个Android Java代码段,它执行我想复制的加密算法。

在react-native中,我从https://github.com/brix/crypto-js添加了“ CryptoJS”,并调用了CryptoJS.enc.TripleDES.encrypt()方法,但返回的结果与预期不同。

这是我要访问的Android代码:

private static byte[] encrypt(String message, String privateKeyMobile) throws Exception {
  final MessageDigest md = MessageDigest.getInstance("MD5");
  final byte[] digestOfPassword = md.digest(privateKeyMobile.getBytes("utf-8"));

  final byte[] keyBytes = new byte[24];
  int q;
  for (q = 0; q < 24 && q < digestOfPassword.length; q++) {
    keyBytes[q] = digestOfPassword[q];
  }
  if (q < 24) {
    for (int u = q; u < 24; u++)
      keyBytes[u] = 0;
  }
  for (int j = 0, k = 16; j < 8;) {
    keyBytes[k++] = keyBytes[j++];
  }

  final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
  final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS7Padding");
  cipher.init(Cipher.ENCRYPT_MODE, key);

  final byte[] plainTextBytes = message.getBytes("utf-8");
  return cipher.doFinal(plainTextBytes);
}

这是我的本机代码:

encrypt(message, key) {
  let md5key = CryptoJS.enc.MD5(key);
  var ciphertext = TripleDES.encrypt(message, md5key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  return ciphertext;
}

这两个函数返回不同的输出。

此php代码与Java代码具有相同的功能: https://webtools.workontech.com/triple-des-encryption-online

其他在线TripleDES工具返回相同的本机结果。

0 个答案:

没有答案