使用CryptoJS.AES.encrypt时出现类型错误

时间:2019-07-23 10:00:16

标签: javascript aes typeerror cryptojs

我在this网站上在线找到了此代码,但是它对我不起作用。当我尝试使用加密功能时,它给了我这个错误:

  

未捕获的TypeError:无法读取未定义的属性“ encrypt”       在加密时(Index.html:36)       在s(Index.html:86)       在HTMLButtonElement.onclick(Index.html:90)

这是我使用的html:

<body>
    <script>
        function s(){
            console.log(encrypt("Hello", "mmm"));
            console.log(decrypt(encrypt("Hello", "mmm"), "mmm"));
        }
    </script>
    <button onclick="s();">click me</button> 
</body>

这是加密代码(在“头部”):

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/core-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/sha256.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/enc-base64.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<script>
    function toWordArray(str){
      return CryptoJS.enc.Utf8.parse(str);
    }

    function toString(words){
      return CryptoJS.enc.Utf8.stringify(words);
    }

    function toBase64String(words){
      return CryptoJS.enc.Base64.stringify(words);
    }

    function encrypt(input, key){

      var PROTOCOL_AES256 = 2;
      var secret_key = CryptoJS.SHA256(key);
      var header = toWordArray("AMAZON" + String.fromCharCode(PROTOCOL_AES256));
      var iv = CryptoJS.lib.WordArray.random(16);
      var body = CryptoJS.AES.encrypt(json_payload, secret_key, {iv: iv});//This is where the was.

      // construct the packet
      // HEADER + IV + BODY
      header.concat(iv);
      header.concat(body.ciphertext);

      // encode in base64
      return toBase64String(header);
    }

    function decrypt(input, key){
      // convert payload encoded in base64 to words
      var packet = CryptoJS.enc.Base64.parse(input);

      // helpers to compute for offsets
      var PROTOCOL_AES256 = 2;
      var secret_key = CryptoJS.SHA256(key);
      var header = toWordArray("AMAZON" + String.fromCharCode(PROTOCOL_AES256));
      var iv = CryptoJS.lib.WordArray.random(16);

      // compute for offsets
      var packet_size = packet.words.length - (iv.words.length + header.words.length);
      var start = iv.words.length + header.words.length;
      var end = packet.words.length;

      var ciphertext = CryptoJS.lib.WordArray.create(packet.words.slice(start, end));
      var parsed_iv = CryptoJS.lib.WordArray.create(packet.words.slice(header.words.length, iv.words.length+1));
      ciphertext = toBase64String(ciphertext);
      var decrypted = CryptoJS.AES.decrypt(ciphertext, secret_key, {iv: parsed_iv});

      return toString(decrypted);
    }
</script>

0 个答案:

没有答案