斯坦福Javascript加密库解密
这个函数可以很好地进行加密,但是当我调用decrypt函数时,我没有得到任何消息到控制台,在我收到一个错误,说它不是JSON对象之前,所以我对它调用了JSON.parse,出于某种原因,它起了作用。加密工作如我所料斯坦福Javascript加密库解密,javascript,Javascript,这个函数可以很好地进行加密,但是当我调用decrypt函数时,我没有得到任何消息到控制台,在我收到一个错误,说它不是JSON对象之前,所以我对它调用了JSON.parse,出于某种原因,它起了作用。加密工作如我所料 <html> <head> <script type="text/javascript" src="http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_random.js.html"
<html>
<head>
<script type="text/javascript" src="http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_random.js.html"></script>
<script type="text/javascript" src="sjcl/sjcl.js"></script>
<script>
function StanfordCrypto(){
this.encrypt = function(){
sjcl.random = new sjcl.prng(8);
sjcl.random.startCollectors();
document.body.onmousemove = function() {
console.log(sjcl.random.getProgress(8));
if(sjcl.random.isReady(8) === 2) {
document.body.onmousemove = "";
sjcl.random.stopCollectors();
this.keyArray = sjcl.random.randomWords(5,8);
for(i=0;i<this.keyArray.length;i++){
this.key += this.keyArray[i];
}
this.encryptedData = sjcl.encrypt(this.key+"dlksdhaslkhdewrhewuiryewio","Test");
document.getElementById("crypto").innerHTML += this.encryptedData;
}
};
};
this.decrypt = function(){
decryptedData = sjcl.decrypt(this.key+"dlksdhaslkhdewrhewuiryewio",this.encryptedData);
alert(decryptedData);
document.getElementById("crypto").innerHTML += "<br/>" + decryptedData;
};
}
function initiate(){
encryption = new StanfordCrypto();
encryption.encrypt();
encryption.decrypt();
}
</script>
</head>
<body onload="initiate();"><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
<div style="break-word:normal;" id="crypto"></div>
</body>
函数stanford crypto(){
this.encrypt=函数(){
sjcl.random=新sjcl.prng(8);
sjcl.random.startCollectors();
document.body.onmousemove=函数(){
log(sjcl.random.getProgress(8));
如果(sjcl.random.isReady(8)==2){
document.body.onmousemove=“”;
sjcl.random.stopCollector();
this.keyArray=sjcl.random.randomWords(5,8);
因为(i=0;i我觉得你的方法根本上有缺陷
调用.encrypt()
时,您正在安装一个mousemove
事件处理程序,但该事件处理程序在.encrypt()
方法完成后很久才会被调用
然后,您实际上在mousemove事件处理程序中进行加密(稍后会发生)
这意味着您在之前调用了。decrypt()
。encrypt()
甚至完成了它的工作(例如,在调用mousemove
事件处理程序之前,因此在实际加密完成之前)
其他一些反馈意见:
所有局部变量都应该在前面声明var
。否则,它们将成为隐式全局变量,并且一个函数的变量很容易影响到其他函数
您有一个半同步半异步的设计。您需要完全是其中一个。或者在调用加密或解密之前很久,在初始化页面时执行收集器操作,这样它们就可以是同步的(通常是同步的)或者将加密/解密逻辑更改为异步,以便它可以处理mousemove事件处理程序的异步性质
考虑在代码中添加一些注释,以记录您尝试执行的操作
使用Return
语句从函数返回数据,而不是在全局变量中
将加密函数与将数据放入DOM的函数分开。加密操作应该是泛型的,并且应该返回加密/解密的数据,调用方可以在需要时将这些数据放入DOM。如果希望函数这样做,则创建一个调用加密函数的更高级别函数,然后执行DOM操作激动
我建议您学习如何在局部变量前面使用var
,否则很快就会出现意外错误。我在脚本中的两个局部变量中添加了var,谢谢。尽管问题仍然存在,但很高兴知道。