1

我想要一个包含 javascript 的离线网页,该网页将使用密钥加密字符串并生成另一个字符串。然后我想做相反的事情。

这是一个简单的工具,我可以离线运行,所以我希望让对话远离客户端加密。

现在我选择了 google crypto.js 作为我的密码,在这个例子中我使用的是 Rabbit

这是我的 jdfiddle

http://jsfiddle.net/Pz3ab/

它使用 jquery 和以下外部资源

http://code.google.com/p/crypto-js/#Rabbit

我哪里错了?

<div>key<br><input class="key" type="text"></div>
<div>readout<br><input class="readout" type="text"></div>
<div>
    <div class="button encrypt">encrypt</div>
    <div class="button decrypt">decrypt</div>
</div>
<div class="error"><div>

var key,readout;
$('.encrypt').on('click', function(){
    if (init()) {
        console.log('-- encrypt clicked --');
        console.log('key = ', key);
        console.log('readout = ', readout);
        var answer = CryptoJS.Rabbit.encrypt(readout, key);
        answer = answer.toString();
        console.log('answer = ',answer);
        $('.readout').val(answer);
    }
});
$('.decrypt').on('click', function(){
    if (init()) {
        console.log('-- decrypt clicked --');
        console.log('key = ', key);
        console.log('readout = ', readout);
        var answer=CryptoJS.Rabbit.decrypt(readout, key);
        answer = answer.toString();
        console.log('answer = ',answer);
        $('.readout').val(answer);
    }
});
function init(){
    key = '' + $('.key').val();
    readout = '' + $('.readout').val();
    console.log('-- init, error check, get key and readout --');
    console.log('key = ', key);
    console.log('readout = ', readout);
    $('.error').empty();
    var success = true;
    if (key=="") {$('.error').append('key is empty<br>');success=false;}
    if (readout=="") {$('.error').append('readout is empty<br>');success=false;}
    return success;
}
4

1 回答 1

4

简短的回答:answer.toString( CryptoJS.enc.Utf8 );

长答案:您看到的解密 otuput 是编码为十六进制的原始读出字符串。它被编码为十六进制的原因是因为密码算法无法知道原始字符编码。是拉丁语1吗?utf8?utf16?等等。通过将 Utf8 编码器传递给 toString 方法,我们可以告诉它使用该字符编码。

于 2013-07-04T18:40:40.513 回答