如何让google crypto.js cypher输出一个字符串?

时间:2013-07-04 17:53:52

标签: javascript cryptography

我希望有一个包含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;
}

1 个答案:

答案 0 :(得分:4)

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

答案很长:你看到的解密输出是编码为十六进制的原始读出字符串。它被编码为十六进制的原因是因为密码算法无法知道原始字符编码。是Latin1吗? UTF8? UTF-16?等等。通过将Utf8编码器传递给toString方法,我们可以告诉它使用该字符编码。