密码学系列——异或加密

前言

继续更新本系列,介绍经常使用的异或加密。javascript

正文

异或加密的原理很是简单。java

原理:c#

0 ^ 0 = 0
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1

就是1和1那么获得的结果是0,0和0获得的结果是0,只有1和0或者0和1获得的结果才是1,因此叫作异或。浏览器

不少时候咱们不但愿咱们请求的时候进行明文显示,而又不能像密码同样彻底是不可逆加密,有些是须要双向的对称加密的。安全

可是不少对称加密效率仍是低了点。有时候咱们有些数据可能只须要简单的加密处理,数据没那么重要,那么如何处理呢?这时候就能够用上这个。dom

看下:ui

function encryption(text) {
    var secretkey = "";
    var x = 
"GkzXQ0eKC1WG5Rky8n5rH7qWV5U2tbLkOYtl9RRwGIiwYZTY37Ne0jiENQadTEjT2GdjUqIpybwLqGpBRau6KneCIZ9Z8hl28MQiS5J0574eN6iN4kdokYDk8vmvyHQRlSrbBORaSSmeyCp7H8mQUQAiaK0VS27h0i9bPLfhKFb6wJOYVSJD3uRXpOc1Tn1sXtPYcP7lJpZyuFW32bDV3KYVfhK6aDE88Xu90pe9XcLcvZr7nlqtMFOtJGv8yXxR9zghb6lyKeSEBBgv1LeZVWFGNKS3L0yG5Mxts3XUSEEkVDw4HFyyTyNTlRaRJagho470PGg156xlooFepmqVpEKsF9wCzFbHX450p4GA2GoptfN0zvuSuP1VMAo6U5xGJKRuvq5jZOpU2l1Rd2EVLPes5LAD5ADjc9dRc4z6JKVLHWyIEWDBCzJB7VHVtxChqKzHg2LjznfcaPx6tqrD43nPLYe2dDO4cfWligvMB7TywihzrYQzSfJ1KxLVECtx";
    // 获得随机数字
    var randnum = Math.ceil(Math.random() * (x.length-text.length));
    for (var i = 0; i < text.length; i++) {
        var key1 = text.charCodeAt(i);
        var key2 = x.charCodeAt(randnum + i);
        var chart = String.fromCharCode(key1 ^ key2);
        secretkey += chart;
    }
    return {
        randnum: randnum * 699,
        secretkey: secretkey
    };
}

上面作的就是异或加密,只是在正式环境中不要这样写,不规范,怎么说呢,好比说x应该是传入的没有的话再作默认值,若是x的值小于text的话,那么应该抛出异常。。。。好吧这不是重点。加密

在js中,利用charCodeAt获取到charCode,而后就能够进行异或加密了,那么后台如何写呢?es5

后台解密代码 C#:
public static string encrypt(string str,int number)
{

     StringBuilder builder = new StringBuilder();
     var encrypt = 
"GkzXQ0eKC1WG5Rky8n5rH7qWV5U2tbLkOYtl9RRwGIiwYZTY37Ne0jiENQadTEjT
2GdjUqIpybwLqGpBRau6KneCIZ9Z8hl28MQiS5J0574eN6iN4kdokYDk8vmvyHQRlSrbBORaSSm
eyCp7H8mQUQAiaK0VS27h0i9bPLfhKFb6wJOYVSJD3uRXpOc1Tn1sXtPYcP7lJpZyuFW32bDV3KYVfhK6aD
E88Xu90pe9XcLcvZr7nlqtMFOtJGv8yXxR9zghb6lyKeSEBBgv1LeZVWFGNKS3L0yG5Mxts3XUSEEkVDw4HFyyTyNTlRaR
Jagho470PGg156xlooFepmqVpEKsF9wCzFbHX450p4GA2GoptfN0zvuSuP1VMAo6U5xGJKRuvq5jZOpU2l1Rd2EVLPes5LAD5ADjc9
dRc4z6JKVLHWyIEWDBCzJB7VHVtxChqKzHg2LjznfcaPx6tqrD43nPLYe2dDO4cfWligvMB7TywihzrYQzSfJ1KxLVECtx";
            number = number / 699;
            char[] chars = str.ToCharArray();
            for (var i = 0; i < chars.Length; i++)
            {
                char temp = (char)(chars[i] ^ encrypt[number + i]);
                builder.Append(temp);
            }
            return builder.ToString();
}

只要拿到数字后再进行一次异或就好。code

原理很简单,好比说咱们的明文是1,那么和一个1,或者以后获得是0。若是获得是0,那么我再次异或一次后,那么就是0和1进行异或,获得就是1了。

上述只供原理参考,由于若是是httpget 请求的话,那么要再次进行base64加密,不然浏览器本身会对一些特殊字符转义。

若是是一些须要快速加解密且没有什么大的信息安全可使用异或加密。

该系列未结,续。

相关文章
相关标签/搜索