c字符串异或加密
/*本问题的关键是如何交换ASCII的二进制位,下面提供简短算法,并附上VC++6.0环境下的运行结果截图。
*/
#include<stdio.h>
charswapbit(charc){
chari,num=0,ch[8];
for(i=0;i<8;i++){
ch[i]=c&1;
c=(c>>1);
}
for(i=0;i<8;i++){
num=2*num+ch[i];
}
returnnum;
}
intmain(){
charch;
for(ch='A';ch<='Z';ch++){
printf("%c=%X:%X ",ch,ch,0XFF&swapbit(ch));
}
return0;
}
㈡ [高分]C语言对字符串的加密和解密
char
ch,name[30],over;
FILE
*fp;
printf("请输入要加密的文件名(正确的做法是:先把解密的数不知道,你想要什么样的加密算法。
AES不错。不过AES是对16个字节长度加密,要是不是16的倍数,处理有点麻烦据保存到字符串里,全部结束之后,一次性把解密
㈢ C语言 文件异或加密
异或加密是所有加密中最容易实施且代码量相对精简的一种加密方式,其原理为任意数据被同一个值(key)两次异或后,值不变。
这种特性,使得异或加密算法的加解密流程是完全相同的,也就是说加解密可以用同一个函数实现。
一、算法思路。
依次读入文件字符,并用key值对其异或,结果输入到目标文件中。
二、算法描述。
1 打开源文件及目标文件。
2 获取密钥值(key)。
3 读入一个字符。
4 对其进行异或计算。
5 结果写入目标文件。
6 重复3-5直到文件结尾。
7 关闭文件。
三、代码实现。
为使代码简洁易懂,输入文件设定为in.txt, 输出文件设定为out.txt, key值设定为0x5C。
假定所有文件及目录可读写。
#include<stdio.h>
#defineIN"in.txt"
#defineOUT"out.txt"
#defineKEY0x5C
voidscrambler(constchar*in,constchar*out,unsignedcharkey)
{
FILE*i,*o;
intc;
i=fopen(in,"rb");
o=fopen(out,"wb");//打开文件,因为假定可读写,所以对是否成功不做判断
while((c=fgetc(i))!=EOF)//读入字符直到文件结尾
{
c^=key;//执行异或加密或解密
fputc(c,o);//写入文件
}
fclose(i);
fclose(o);
}
intmain()
{
scrambler(IN,OUT,KEY);
return0;
}
但是异或加密也是有缺陷的。最大的缺陷是加密操作是二进制层面的,获取到的加密文件大部分将是不可读的乱码。这也是为什么在打开文件的时候要以二进制方式的原因。
鉴于此,在此不便给出测试样例及输入输出,可自行调试。
㈣ C语言中最简单的字符串加密解密问题!!!!希望大家帮帮忙,分不是问题 !!
加密解密的算法都没错,错的是解密程序里的文件操作方法。
rewind(fp)没有必要。因为fp已经被close了。
一般不推荐同时对一个文件又读又写,因为这样会导致很多缓冲区同步的问题。比如:
fputc()和getc()之间,必须要调用fflush(fp);
即使这样,还是会有问题。比如回车,getc()可能会返回两个字符,\n和\a。但是用fputc()写入的时候,分别写入\n和\a会把第二行第一个字符覆盖掉。
正确的做法是:
先把解密的数据保存到字符串里,全部结束之后,一次性把解密完的字符串写到文件里去。
void main()
{
char ch,name[30];
char content[1000];
int n = 0;
FILE *fp;
printf("name:\a");
gets(name);
fp = fopen(name,"r+");
if(fp==NULL)
{
printf("No file: %s!\n\a",name);
return;
}
ch = getc(fp);
while(ch!=EOF)
{
if((isalpha(ch))!=0)
{
if((ch >= 'a' && ch <= 'd') || (ch >= 'A' && ch <='D'))
ch = ch + 22;
else
ch = ch - 4;
}
content[n++] = ch;
ch = getc(fp);
//ch = getc(fp);
}
content[n] = 0;
rewind(fp);
fprintf(fp, "%s", content);
fclose(fp);
printf("%s ok\a\n",name);
printf("content: %s\n", content);
printf("\n");
}
㈤ C语言异或加密这个编程怎么写
字符A 异或 字符C 在c语言里这样写:
char val = 'A' ^ 'C';
㈥ C语言 异或加密
太麻烦了,建议您可以下载文件夹加密超级大师试试。
文件夹加密超级大师支持所有windows系统,可以加密文件夹,加密文件,保护磁盘和数据粉碎,使用起来非常方便。
㈦ C语言字符串加密
问题不小,你表面用的是C
但是,好多地方不符合C的语法
,,比如:
for
(int
i=0;
str[i]
!=
'\0';
i++)
还有,就是你好像没有弄清楚
,你要做什么似的,有好多无用的东西,
就像你的函数里的,key
,虽然你提到key了,但是你根本没有使用key,你只是使用45来进行加密,,还有就是一个文件
的大小,是不确定的,你用一个100个字符的字符串来存,有点那个不安全了,,如果稍长一点就会出问题,产生运行时错误。其实你这个加密和解密是一个可逆过程,用一个函数,就可以了,具体你想要的也不是太明白,就给你弄了一个简单一点加密和解密程序
,输入输出不是同一个文件
,不知道是不是你想要的。
#include
#include
#include
void
Decrypt()
{
char
fname[FILENAME_MAX];
char
fname2[FILENAME_MAX];
FILE*
fp;
FILE*
fp1;
int
key;
char
c;
printf("输入要加/解密文件的路径:\n");
scanf("%s",
fname);
printf("请输入密钥:\n");
scanf("%d",&key);
strcpy(fname2,fname);
strcat(fname2,".txt");
if(
(fp
=
fopen(fname,"r+"))
==
NULL)
{
printf("error");
exit(1);
}
if(
(fp1
=
fopen(fname2,"w+"))
==
NULL)
{
printf("error");
exit(1);
}
while(
(c
=
fgetc(fp))
!=
EOF)
{
c
=
c^key;
fputc(c,fp1);
}
fcloseall();
}
int
main()
{
Decrypt();
return
0;
}
如果想看一些好一点的加密算法
,我这里有一些,联系我发给你
,,
㈧ 各位大虾!小弟在这里跪求帮忙解决一个C++字符串加密解密问题
按你的要求,我刚写的:
没有注释,有问题再交流吧.
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
class encrypt
{
public:
encrypt(const char *); //构造函数,加密
~encrypt();
void showcode();
void decrypt(); //解密
private:
char *code;
int length;
};
encrypt::encrypt(const char *string)
{
int i=0;
length=strlen(string);//获得原字符串的长度
code=new char[length+1];// 加上结束符'\0'
for(;i<length-1;i++) //从第一个字符开始,直到倒数第二个
{
code[i]= string[i] ^ string[i+1]; //加密
}
code[i]= string[i] ^ string[0];//i=length-1,最后一个字符
//跟第一个字符做异或
code[length] = '\0'; //加上结束符
}
encrypt::~encrypt()
{
delete[] code;
}
void encrypt::showcode()
{
for(int i=0;i<length;i++)
printf("%1c",code[i]); //防止'\0',将字符逐个打出.不用iostream
//iostream遇到'\0'会自动结束,,而加密过程中可能中间出现'\0',不该结束
}
void encrypt::decrypt()
{
char p;
cout <<"\nThe First Character:";
cin >> p;
code[length-1] ^= p; //最后一个字符跟第一个再次异或,得到原来的字符(两次异或,得到原值)
for(int i=length-2; i>=0 ; i--) //从倒数第二个开始
{
code[i]^=code[i+1]; //跟后面一个做异或,得原值
}
cout<<"the original string is:" <<endl;
showcode();
cout <<endl;
}
int main()
{
encrypt e("hello world!");
e.showcode();
e.decrypt();
return 0;
}
㈨ C语言 字符串加密
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain(void)
{
charc[100];
intk;
intlen,i,temp;
scanf("%s",c);
scanf("%d",&k);
len=(int)strlen(c);
k=k%26;
for(i=0;i<len;i++)
{
if(c[i]>='a'&&c[i]<='z')
{
if(c[i]+k>'z')
{
temp='z'-c[i];
temp=k-temp-1;
c[i]='a'+temp;
}
else
{
c[i]+=k;
}
}
elseif(c[i]>='A'&&c[i]<='Z')
{
if(c[i]+k>'Z')
{
temp='Z'-c[i];
temp=k-temp-1;
c[i]='A'+temp;
}
else
{
c[i]+=k;
}
}
else
{
/*donothing*/
}
}
printf("%s ",c);
return0;
}