阿澜丶 2020-04-08 16:57 采纳率: 0%
浏览 804
已结题

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

这是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条回答 默认 最新

  • 「已注销」 2020-04-08 17:02
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services