crypto-js des加密与解密 与java运行结果不一致的问题

public byteToString(arr) {
  if(typeof arr === 'string') {
    return arr;
  }
  var str = '',
    _arr = arr;
  for(var i = 0; i < _arr.length; i++) {
    var one = _arr[i].toString(2),
      v = one.match(/^1+?(?=0)/);
    if(v && one.length == 8) {
      var bytesLength = v[0].length;
      var store = _arr[i].toString(2).slice(7 - bytesLength);
      for(var st = 1; st < bytesLength; st++) {
        store += _arr[st + i].toString(2).slice(2);
      }
      str += String.fromCharCode(parseInt(store, 2));
      i += bytesLength - 1;
    } else {
      str += String.fromCharCode(_arr[i]);
    }
  }
  return str;
}

//加密
public encryptDES(psw:string,key:string){

  var iv = [1,2,3,4,5,6,7,8];
  var ivHex =  CryptoJS.enc.Latin1.parse(this.byteToString(iv));//原java使用的是iv = [1,2,3,4,5,6,7,8]

  var keyHex = CryptoJS.enc.Hex.parse(CryptoJS.enc.Utf8.parse(key).toString(CryptoJS.enc.Hex));

  var encrypted = CryptoJS.DES.encrypt(psw, keyHex,
    { iv: ivHex,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    }
  );


  return encrypted.toString();


}

//解密
public decryptDES(encrypted:string,key:string){

  var iv = [1,2,3,4,5,6,7,8];
  var ivHex =  CryptoJS.enc.Latin1.parse(this.byteToString(iv));
  var keyHex = CryptoJS.enc.Hex.parse(CryptoJS.enc.Utf8.parse(key).toString(CryptoJS.enc.Hex));

  var plaintext = CryptoJS.DES.decrypt(CryptoJS.enc.Base64.parse(encrypted).toString(CryptoJS.enc.Base64),keyHex, {
    iv: ivHex,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });

  return plaintext.toString(CryptoJS.enc.Utf8);
}

你可能感兴趣的:(ionic,angulars)