qq_36493586
阿澜丶
采纳率0%
2020-04-08 16:57

通过js做出的aes加密与java后台加密出来的不同 求帮助我js 应该修改哪里?

25

这是java后台的加密

public static String aesEncrypt(String content, String encryptKey) throws Exception {
  KeyGenerator kgen = KeyGenerator.getInstance("AES");
  SecureRandom random=SecureRandom.getInstance("SHA1PRNG");
  random.setSeed(encryptKey.getBytes());
  kgen.init(128, random);
  SecretKey secretKey = kgen.generateKey();
  Cipher cipher = Cipher.getInstance("AES");
  cipher.init(Cipher.ENCRYPT_MODE, secretKey);
  byte[] encryptDataByte  = cipher.doFinal(content.getBytes("utf-8"));
  //将二进制转换成16进制
  String hexStr   = parseByte2HexStr(encryptDataByte);
  //转换为base64
  String encodeStr   = Base64.encodeBase64String(hexStr.getBytes());
  return encodeStr;
 }

java后台将二进制转换成16进制

/**
  * 将二进制转换成16进制
  * @method parseByte2HexStr
  * @param buf
  * @return
  * @throws
  * @since v1.0
  */
 public static String parseByte2HexStr(byte buf[]){
  StringBuffer sb = new StringBuffer();
  for(int i = 0; i < buf.length; i++){
   String hex = Integer.toHexString(buf[i] & 0xFF);
   if (hex.length() == 1) {
    hex = '0' + hex;
   }
   sb.append(hex.toUpperCase());
  }
  return sb.toString();
 }

这是我用JS写的加密 用的CryptoJS

  encrypt(word, keyStr) { // 加密
    var key = CryptoJS.enc.Utf8.parse(keyStr);
    var srcs = CryptoJS.enc.Utf8.parse(word)

    var encrypted = CryptoJS.AES.encrypt(srcs, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    }) 

    //console.log("encrypted===" + encrypted.toString())
    var base64Str = CryptoJS.enc.Base64.stringify(encrypted.toString());
    //转16进制
    var dataString = strToHexCharCode(encrypted.toString());
    // //base64加密
    dataString = window.btoa(dataString.toString());
    console.log(dataString);

    return dataString;

  },
    //转16进制
function strToHexCharCode(str) {
  if (str === "")
    return "";
  var hexCharCode = [];
  //hexCharCode.push("0x");
  for (var i = 0; i < str.length; i++) {
    hexCharCode.push((str.charCodeAt(i)).toString(16));
  }
  return hexCharCode.join("");
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • weixin_44700117 「已注销」 1年前

    前台的padding: CryptoJS.pad.Pkcs7配置了使用pkcs7进行填充,但是java默认是使用pkcs5Padding进行填充。
    解决方案:前台将填充方式改为pkcs5,或者后台将填充改为pkcs7Padding

    点赞 评论 复制链接分享

相关推荐