密碼學系列——異或加密

前言

繼續更新本系列,介紹經常使用的異或加密。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加密,不然瀏覽器本身會對一些特殊字符轉義。

若是是一些須要快速加解密且沒有什麼大的信息安全可使用異或加密。

該系列未結,續。

相關文章
相關標籤/搜索