我希望有一个包含javascript的离线网页,该网页将使用密钥加密字符串并生成另一个字符串。然后我想反过来。
这是一个简单的工具,我会离线运行,所以我宁愿让对话远离客户端加密。
现在我选择google crypto.js作为我的密码而且这个例子我正在使用Rabbit
这是我的jdfiddle
使用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;
}
答案 0 :(得分:4)
简短回答:answer.toString( CryptoJS.enc.Utf8 );
答案很长:你看到的解密输出是编码为十六进制的原始读出字符串。它被编码为十六进制的原因是因为密码算法无法知道原始字符编码。是Latin1吗? UTF8? UTF-16?等等。通过将Utf8编码器传递给toString方法,我们可以告诉它使用该字符编码。