zoukankan      html  css  js  c++  java
  • 异或加密算法

    异或加密是一种很简单的加密算法,无论是原理还是操作性上,都不具备任何难度,所以,在做一些简单的加密时,被广为采用。

    但因为很简答,破解起来也很容易,所以对于更加私密的信息,不要用这种方法加密。

    下面我们简单地介绍一下异或的运算:

    数学运算符为XOR(exclusive OR),在计算机中通常用"^"的符号表示(在英文模式下,按住shift键+键盘上方的数字6)

    在二进制中:

    1 XOR 0=1

    0 XOR 1=1

    1 XOR 1=0

    0 XOR 0=0

    可以看出若两个数相同取0,不同取1。

    例:

    运算11001 ^ 01011=10010

    用其他进制表示的数做异或运算时,则应先将他们化为二进制的数,再做运算。(不足的位在前边填0补齐)

    例:

    计算6^3=110^011=101

    *******************************************************

    异或运算具有可逆性。

    即:若a^b=c,则有b^c=a (a,b,c分别表示0或1)

    利用前面的异或运算规则,我们就其中之一分析:

    1 XOR 0=1        则     0 XOR 1=1

    原理:根据异或的运算规则,相同为0,不同为1;

    若两个数a,b相同,a=b,则用任意一个数与0做异或时,即得到这个数本身,也就是另一个数;

    应用 1 XOR 0 = 1  ,  0 XOR 0= 0 这两个运算规则(相当于取这个数)。

    若两个数a,b不同,a=~b,则用任意一个数与1做异或时,即得到这个数的相反,也就是另一个数

    应用 1 XOR 1 = 0  ,  0 XOR 1 = 1 这两个运算规则(相当于对这个数取反)。  

    **********************************************************

    我们不妨对异或的可逆性进行推广,对任意的两串二进制数做异或,得到的结果,再与其中任意一串二进制数做异或,得到另一串二进制数。

    即a^b=c , 则 b^c=a.(a,b,c分别表示一串二进制数)

    与上面的公式形式上是相同的。 

    那么,若a是想要加密的信息,则有一密钥b,对a和b做异或,得到的c就是加密后的信息,可进行传输。

    得到c后,只需要再 与b做异或,即可得到原信息a。

    若应用到字符串上,则字符串上每一个字符都表示一串二进制数。

    例:

    #include <stdio.h>
    main()
    {
       char a[]="Password";        //要加密的密码
       char b[]="encryption";     //密钥
       int i;
       //加密代码
       for(i=0;a[i];i++)
         a[i]=a[i]^b[i];
       printf("Your Password is encrypted: %s
    ",a);
       /*解密代码*/
       for(i=0;a[i];i++)
          a[i]=a[i]^b[i];
       printf("You Password: %s
    ",a);
      
    }
  • 相关阅读:
    笔记64 Spring Boot快速入门(四)
    笔记63 Spring Boot快速入门(三)
    笔记62 Spring Boot快速入门(二)
    笔记61 Spring Boot快速入门(一)
    笔记60 Spring+Mybatis整合
    笔记59 Spring+Hibernate整合(二)
    【转】单点登录原理与实现
    【转】大型网站架构演变和知识体系
    Eclipse下绿色安装插件Aptana、Swing
    zeromq源码分析笔记之准备(0)
  • 原文地址:https://www.cnblogs.com/albertblues/p/5670528.html
Copyright © 2011-2022 走看看