JS位异或运算制作加密解密
解密可通过位异或运算来实现,什么是位异或运算呢?"^"就是js里的位异或运算符号。他的功能十分强大,别看它只是一个小小的符号,它有时进行的运算可是极其深奥的!
接下来,我们先了解一下“^”运算。
“^”的意思是:当两个操作数对应位不相同时结果的相应位即为一,否则为零。当然,这里的对应位是指二进制的位。
例如:1 ^ 2=3。
这是因为1=01,2=10.
1 ^ 2 =11 =3。
小编做了一个样例来帮助大家理解。
代码如下:
var a=1;
var b=2;
var c=a ^ b;
document.write("a"+a+" b"+b);
document.write("
");
document.write("a ^ b"+c);
document.write("
");
var d=c ^ b;
document.write("c ^ b"+d);
通过输出结果(如图),我们得知a ^ b=c,c ^ b=a。
我们的加密解密就是利用的这个原理。
加密解密原理:
将需要加密的内容看做a,密钥看做b,a ^ b=加密后的内容c。
而解密时只需要将c ^ 密钥b=原内容a。如果没有密钥,就不能解密!
接下来我们来看一下加密解密的效果图。
加密解密还支持多重加密,但是要记得加密的次数,解密时运用相同密钥做解密操作相同次数即可。
不仅如此,加密解密还支持多重不同密钥加密,只要你记得加密使用密钥顺序!
接下来我们来看一下代码:
首先是按钮的onclick事件,调用相应的加密解密js函数。
接下来我们看一下js部分:
这是相应的onclick事件,从这段代码我们看出,进行加密解密操作的函数是一个函数:ff()。而onclick事件只是做整理输出格式,获取输入框的值等操作。
然后我们再来看ff()这个函数。这里就是加密解密核心算法!
如图,很明显这里通过一个双重嵌套循环,将密钥(b)与要加密的内容(a)逐个拆分,并取他们的 unicode 编码,然后进行位异或运算得到加密后的内容(c)。
而解密时,c代替了a的位置与b进行位异或运算,从而达到解密的目的。
至于unicode编码,是指定字符的编码, 0-- 65535 之间的整数。好巧,与计算机的端口数量一样多,是巧合么?小编不太清楚。
关于加密解密的东西就讲到这里了。其实,小编的目的不是只讲一下加密解密,因为有关加密解密的函数也不少,小编只是想说明"^"运算的强大性!
另外,学习了这款加密解密,来看一下小编给你留的问题怎样?
解密:密钥为111111
兇宯戠昞杔裴逍皵
看你能否解出!!!小编可是发了一句十分重要的话哦!~\(≧▽≦)/~啦啦啦