使用位运算对数据或文件内容进行加密
一、位运算
位运算用来操作整数基本类型中的的单个bit,即二进制位。
二、位运算类型
1、“与”操作 & :输入都为1的情况下,才为1,否则为0;
2、“或”操作 | :输入都为0的情况下,才为0,否则为1;
3、“异或”操作 ^ : a^b = a’b | ab’ (a’表示非a, ~a)
解释:
当a=1,b=1时,a^b = 0;
当a=1,b=0时,a^b = 1;
当a=0,b=1时,a^b = 1;
当a=0,b=0时,a^b = 0;
三、加密原理
将特定字符串转变为一组bit型数组,将每一个bit数据和特定bit数值进行异或,产生的数组转化为字符串,这样可以起到加密的效果。而解密的操作是,将加密操作重新进行一遍,这样就还原了之前的字符串。这是位运算(异或)的一个重要特性。
四、加密与解密实例
Scanner scan = new Scanner(System.in);
String target = scan.nextLine();
char[] arr = target.toCharArray();
for(int i=0;i< arr.length;i++){
arr = (char)(arr^200);
}
加密的字符串:arr.toString();
for(int i=0;i< arr.length;i++){
arr = (char)(arr^200);
}
解密的字符串:arr.toString();
初次讲完位运算,基本匀运算法则懂了。
最感兴趣的是运用位运算来加密。
代码如下:
#include<stdio.h>
#include<string.h>
int **in()
{
int i,j;
int key;
char p[80]="";
char c[80]="";
char key1[80]="";
printf("input please\n");
gets(p);
printf("key please\n");
gets(key1);
key=strlen(key1);
for(i=0;p!='\0';i+=key)
{
for(j=0;j<key;j++)
{
c[j+i]=p[i+j]^key1[j];
}
}
printf("加密后:%s\n",c);
printf("请输入密钥:\n");
gets(key1);
key=strlen(key1);
for(i=0;c!='\0';i+=key)
{
for(j=0;j<key;j++)
{
p[i+j]=c[i+j]^key1[j];
}
}
printf("解密后明文:%s\n",p);
return 0;
}
转载:感谢您阅览,转载请注明文章出处“来源从小爱孤峰知识网:一个分享知识和生活随笔记录的知识小站”。
链接:使用位运算对数据或文件内容进行加密http://www.gufeng7.com/niaolang/359.html
联系:如果侵犯了你的权益请来信告知我们删除。邮箱:119882116@qq.com