异或加密原理及实例
来源:互联网 发布:老子二章天下皆知 编辑:程序博客网 时间:2024/06/07 01:14
异或的运算方法是一个二进制运算:
1^1=0
0^0=0
1^0=1
0^1=1
两者相等为0,不等为1.
对于一个字符来说,都可以用二进制码来表示.如A:01000001
字符的异或就是对每一位进行二进制运算.
用于加密算法时,假设你要加密的内容为A,密钥为B,则可以用异或加密:
C=A^B
在数据中保存C就行了.
用的时候:
A=B^C
即可取得原加密的内容,所以只要知道密钥,就可以完成加密和解密.
#include < stdio.h>
main()
{
char a[]=”MyPassword”; /要加密的密码/
char b[]=”cryptographic”; /密钥/
int i;
/加密代码/
for(i=0;a[i]!=’\0’;i++)
a[i]=a[i]^b[i];
printf(“You Password encrypted: %s\n”,a);
/解密代码/
for(i=0;a[i]!=’\0’;i++)
a[i]=a[i]^b[i];
printf(“You Password: %s\n”,a);
}
在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
解密的方法就是再执行一次同样的操作。
加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。
下面的代码演示了如何实现该功能。
public class 异或加密法 {
public static void print(char[] p){
for(char x:p){
System.out.printf(“%s”, x);
}
System.out.println();
}
public static void f(char[] buf, char[] uckey, int n) {
int i;
for (i = 0; i < n; i++)
buf[i] = (char) (buf[i] ^ uckey[i]);
}
public static void main(String[] args) { char p[] = "abcd中国人123".toCharArray(); // 待加密串 char[] key = "11001100010001110".toCharArray(); // 以串的形式表达的密匙,运算时要转换为按位存储的形式。 int np = p.length; int nk = key.length; //nk=17 char[] uckey = new char[np]; // 密匙串需要按位的形式循环拼入 uckey中,原来p中的每一位对应uckey中一个字节 int i; for (i = 0; i < np * 8; i++) { if (key[i % nk] == '1') uckey[i/8] |= (char)0x80 >> (i%8); // 填空1 else uckey[i/8] &= ~(char)0x80 >> (i%8); // 填空2 } f(p, uckey, p.length); print(p); f(p, uckey, p.length); print(p); } }
运行结果:
% G亞囬乣¹Þ÷
abcd中国人123
注:
a|b=4|7=(化为二进制进行按位或运算)0100|0111=0111,结果再化为十进制7,(按位或,就是对应的每一位进行或运算 1|1=1, 1|0=0|1=1, 0|0=0)
所以4|7=7
java中有三种移位运算符
1. << : 左移运算符,num << 1,相当于num乘以2
2.>> : 右移运算符,num >> 1,相当于num除以2
3.>>> : 无符号右移,忽略符号位,空位都以0补齐
//0x80 换位二进制为1000 0000,即128,通过i%8对uckey的每一个位进行运算。
- 异或加密原理及实例
- 异或加密原理
- 异或加密原理
- iOS开发之 异或加密的原理详解
- 有趣算法--“异或” 原理及应用
- MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)
- Maxtocode对.Net程序加密的原理及解密探讨三(实例解密)
- base64加密原理及作用
- android加密方式及原理
- 触发器原理及实例
- Ajax实例及原理
- ContentProvider原理及实例
- 多线程原理及实例
- ContentProvider原理及实例 .
- ContentProvider原理及实例
- ContentProvider原理及实例
- ContentProvider原理及实例
- 异或加密
- [译]Java定时任务调度-Quartz文档(七)TriggerListeners and JobListeners
- opengl画五角星
- Android Things HelloWorld
- 常用关键字
- cocos2d-x 粒子效果内存泄露及Unity一定范围内出怪实现备份。
- 异或加密原理及实例
- Class.forName()用法详解
- 用vs2015 编译 web app ionic
- MurmurHash3
- 《基于双阶段支持向量机的电力系统暂态稳定预测及控制》总结
- C++考点-字符串操作
- Raspberry Pi树莓派raspi-config配置
- 0x0FFFFFFF
- 摄像机追踪角色