C语言 异或加密 10
文件加密解密。将文件file1中的每一字符与0x6a异或变成另一个字符送屏幕显示,同时存入文件file2中。打开加密的file2输出解密内容。file1文件内容是:Thi...
文件加密解密。将文件file1中的每一字符与0x6a异或变成另一个字符送屏幕显示,同时存入文件file2中。打开加密的file2输出解密内容。
file1文件内容是:This is a book.
路径为:d:\file1.txt
d:\file2.txt
(请从命令行输入)
特别提示:
1.异或的C语言描述方式
a=a^b
(a和b异或后值赋给a)
2.a和b异或的结果再与b相异或则a还原。
3.
0x6a是16进制,可直接赋值给int b=0x6a;然后用b与a进行异或。 展开
file1文件内容是:This is a book.
路径为:d:\file1.txt
d:\file2.txt
(请从命令行输入)
特别提示:
1.异或的C语言描述方式
a=a^b
(a和b异或后值赋给a)
2.a和b异或的结果再与b相异或则a还原。
3.
0x6a是16进制,可直接赋值给int b=0x6a;然后用b与a进行异或。 展开
4个回答
展开全部
C语言异或加密实现的原理为,将任意值,与相同值两次异或后,结果与原值相同。所以可以通过将源数据与一个固定的值(秘钥key)异或后,得到密文,然后将密文再次与秘钥异或,得到原文。这样就实现了异或加密及解密。
C语言中的异或是一种按位操作的计算,其计算原理为,操作数对应位上的值相同,则结果位上值为0,否则为1.异或的运算符号为^,于是真值表如下:
0^0=0
0^1=1
1^0=1
1^1=0
这样区分源数据和秘钥值,有如下四种可能:
0^0=0 0^0=0
0^1=1 1^1=0
1^0=1 1^0=1
1^1=0 0^1=1
以上是将一个值,用另一个值连续异或两次后的计算过程,可以看到,最终的值与原始值是相同的。这就是异或加密的基础原理。
C语言中的异或是一种按位操作的计算,其计算原理为,操作数对应位上的值相同,则结果位上值为0,否则为1.异或的运算符号为^,于是真值表如下:
0^0=0
0^1=1
1^0=1
1^1=0
这样区分源数据和秘钥值,有如下四种可能:
0^0=0 0^0=0
0^1=1 1^1=0
1^0=1 1^0=1
1^1=0 0^1=1
以上是将一个值,用另一个值连续异或两次后的计算过程,可以看到,最终的值与原始值是相同的。这就是异或加密的基础原理。
展开全部
这个我不会。
给文件加密,我使用的是超级加密3000。
超级加密3000有超快和最强的文件、文件夹加密功能、数据保护功能,文件夹、文件的粉碎删除以及文件夹伪装等功能。
给文件加密,我使用的是超级加密3000。
超级加密3000有超快和最强的文件、文件夹加密功能、数据保护功能,文件夹、文件的粉碎删除以及文件夹伪装等功能。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
常见的算法。
#include<stdio.h>
viod main()
{
FILE *in, *out;
char *in_file, *out_file;
char ch;
printf(" input in file name:\n");
gets(in_file);
printf(" input out file name:\n");
gets(out_file);
in = fopen( in_file, "rb"); /*以二进制只读方式打开*/
out = fopen( out_file, "wb");
if( in == NULL || out == NULL ) exit(1);
ch = fgetc(in);
while( ch != -1 ) /*若文件没有结束*/
{
ch = ch^1; /*异或运算*/
fputc( ch, out ); /*将异或结果放入输出文件中*/
ch = fgetc(in);
}
fclose(in);
fclose(out);
}
是否可以解决您的问题?
#include<stdio.h>
viod main()
{
FILE *in, *out;
char *in_file, *out_file;
char ch;
printf(" input in file name:\n");
gets(in_file);
printf(" input out file name:\n");
gets(out_file);
in = fopen( in_file, "rb"); /*以二进制只读方式打开*/
out = fopen( out_file, "wb");
if( in == NULL || out == NULL ) exit(1);
ch = fgetc(in);
while( ch != -1 ) /*若文件没有结束*/
{
ch = ch^1; /*异或运算*/
fputc( ch, out ); /*将异或结果放入输出文件中*/
ch = fgetc(in);
}
fclose(in);
fclose(out);
}
是否可以解决您的问题?
追问
不是啊,要用0x6a
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char encrypt( char f , char c)
{
return f^c;
}
int OutEncrypt( char *FilePath, char *SecretWord )
{
FILE * fp ;
FILE * fp1;
char *p= FilePath , *s= SecretWord;
//char fn[128], *p = fn, ps[10], *s = ps; //fn[128]存放加密文件路径,ps[10]存放密码
char ch;
char *tm = "C:\\temp.temp"; //存放临时文件
if(( fp = fopen(p,"rb") )== NULL || ( fp1 = fopen(tm,"wb") ) == NULL )
{
return 0; //加密失败
}
ch = fgetc(fp);
while( !feof(fp) )
{
s = SecretWord;
while( *s != '\0' )
{
ch = encrypt( ch, *s++ );
fputc( ch, fp1 );
ch = fgetc(fp);
}
}
fclose( fp );
fclose( fp1);
remove(p);
rename(tm, p);
return 1; //加密成功
}
{
return f^c;
}
int OutEncrypt( char *FilePath, char *SecretWord )
{
FILE * fp ;
FILE * fp1;
char *p= FilePath , *s= SecretWord;
//char fn[128], *p = fn, ps[10], *s = ps; //fn[128]存放加密文件路径,ps[10]存放密码
char ch;
char *tm = "C:\\temp.temp"; //存放临时文件
if(( fp = fopen(p,"rb") )== NULL || ( fp1 = fopen(tm,"wb") ) == NULL )
{
return 0; //加密失败
}
ch = fgetc(fp);
while( !feof(fp) )
{
s = SecretWord;
while( *s != '\0' )
{
ch = encrypt( ch, *s++ );
fputc( ch, fp1 );
ch = fgetc(fp);
}
}
fclose( fp );
fclose( fp1);
remove(p);
rename(tm, p);
return 1; //加密成功
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询