使用CryptoJS更改密钥

时间:2016-06-10 08:14:07

标签: javascript encryption cryptojs

我正在使用CryptoJS来加密和解密文本。在这里,我只是接收消息并显示加密和解密消息。

我正在使用DES算法进行加密和解密。

这是我的HTML文件

<!DOCTYPE html>
<html>
<head>
    <script src="tripledes.js"></script>
    <script src="mode-ecb.js"></script>
    <style type="text/css">
        .maindiv {
            /* Just to center the form on the page */
            margin: 0 auto;
            width: 400px;
            /* To see the outline of the form */
            padding: 1em;
            border: 1px solid #CCC;
            border-radius: 1em;
        }
         div + div {
                margin-top: 1em;
            }
        label {
            /* To make sure that all labels have the same size and are properly aligned */
            display: inline-block;
            width: 90px;
            text-align: right;
        }
        .button {
            /* To position the buttons to the same position of the text fields */
            padding-left: 90px; /* same size as the label elements */
        }

        button {
            /* This extra margin represent roughly the same space as the space
       between the labels and their text fields */
            margin-left: .5em;
        }
        input:focus, textarea:focus {
            /* To give a little highlight on active elements */
            border-color: #000;
        }
        input, textarea {
            /* To make sure that all text fields have the same font settings
       By default, textareas have a monospace font */
            font: 1em sans-serif;
            /* To give the same size to all text field */
            width: 300px;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
            /* To harmonize the look & feel of text field border */
            border: 1px solid #999;
        }
    </style>
    <script type="text/javascript">

        function viewvalue()
        {
            var message = document.getElementById("msg").value;
            var key = document.getElementById("key").value;
            var encrypted = encryptByDES(message, key);
            document.getElementById("enctext").textContent = encrypted;
            document.getElementById("dectxt").textContent = decryptByDES(encrypted, key);;


        }

        function encryptByDES(message, key) {

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

            var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });
            return encrypted.toString();
        }

        function decryptByDES(ciphertext, key) {
            var keyHex = CryptoJS.enc.Utf8.parse(key);

            var decrypted = CryptoJS.DES.decrypt({
                ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
            }, keyHex, {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });

            return decrypted.toString(CryptoJS.enc.Utf8);
        }
    </script>
</head>
<body>

    <div class="maindiv">
        <div>
            <label for="name">Message:</label>
            <input type="text" id="msg" name="msg" />
        </div>
        <div>
            <label for="mail">Key:</label>
            <input type="text" id="key" name="key" />
        </div>
        <div>
            <label for="msg">Encrypted Text:</label>
            <textarea id="enctext" name="enctxt"></textarea>
        </div>
        <div>
            <label for="msg">Decrypted Text:</label>
            <textarea id="dectxt" name="dectxt"></textarea>
        </div>
        <div class="button">
            <button onclick="viewvalue()">View</button>
        </div>
    </div>
</body>
</html>

这是我的.js文件

/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
/**
 * Electronic Codebook block mode.
 */
CryptoJS.mode.ECB = (function () {
    var ECB = CryptoJS.lib.BlockCipherMode.extend();

    ECB.Encryptor = ECB.extend({
        processBlock: function (words, offset) {
            this._cipher.encryptBlock(words, offset);
        }
    });

    ECB.Decryptor = ECB.extend({
        processBlock: function (words, offset) {
            this._cipher.decryptBlock(words, offset);
        }
    });

    return ECB;
}());

请任何人都可以告诉我在哪里以及如何更改密钥。

1 个答案:

答案 0 :(得分:1)

根据https://code.google.com/archive/p/crypto-js/#Custom_Key_and_IV的文档,如果您希望提供自定义密钥,则需要定义并提供初始化向量(IV)和密钥:

var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'); 
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); 
var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });