c语言数据加密解密函数 c语言加密解密算法

编写函数完成字符串的加密与解密(c语言)?C语言代码和运行结果如下:
输出符合示例,加解密均正确 , 望采纳~
附源码链接:字符串加解密
RSA加密解密算法示例(C语言)#include stdlib.h
#include stdio.h
#include string.h
#include math.h
#include time.h
#define PRIME_MAX 200// 生成素数范围
#define EXPONENT_MAX 200// 生成指数e范围
#define Element_Max 127// 加密单元的最大值c语言数据加密解密函数 , 这里为一个char, 即1Byte
char str_read[100]="hello world !";// 待加密的原文
int str_encrypt[100];// 加密后的内容
char str_decrypt[100];// 解密出来的内容
int str_read_len;// str_read 的长度
int prime1, prime2;// 随机生成的两个质数
int mod, eular;// 模数和欧拉数
int pubKey, priKey;// 公钥指数和私钥指数
// 生成随机素数c语言数据加密解密函数,实际应用中,这两个质数越大 , 就越难破解 。
int randPrime()
{
int prime, prime2, i;
next:
prime = rand() % PRIME_MAX;// 随机产生数
if (prime = 1) goto next;// 不是质数,生成下一个随机数
if (prime == 2 || prime == 3) return prime;
prime2 = prime / 2;// prime=4, prime2 的平方必定大于 prime , 因此只检查小于等于prime2的数
for (i = 2; i = prime2; i)// 判断是否为素数
{
if (i * iprime) return prime;
if (prime % i == 0) goto next;// 不是质数,生成下一个随机数
}
}
// 欧几里德算法,判断a,b互质
int gcd(int a, int b)
{
int temp;
while (b != 0) {
temp = b;
b = a % b;
a = temp;
}
return a;
}
//生成公钥指数,条件是 1 e欧拉数,且与欧拉数互质 。
int randExponent()
{
int e;
while (1)
{
e = rand() % eular; if (eEXPONENT_MAX) break;
}
while (1)
{
if (gcd(e, eular) == 1) return e; e = (e1) % eular; if (e == 0 || eEXPONENT_MAX) e = 2;
}
}
//生成私钥指数
int inverse()
{
int d, x;
while (1)
{
d = rand() % eular;
x = pubKey * d % eular;
if (x == 1)
{
return d;
}
}
}
//加密函数
void jiami()
{
str_read_len = strlen(str_read);//从参数表示的地址往后找,找到第一个'\0',即串尾 。计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度 。
printf("密文是:");
for (int i = 0; istr_read_len; i)
{
int C = 1; int a = str_read[i], b = a % mod;
for (int j = 0; jpubKey; j) //实现加密
{
C = (C*b) % mod;
}
str_encrypt[i] = C;
printf("%d ", str_encrypt[i]);
}
printf("\n");
}
//解密函数
void jiemi()
{
int i=0;for (i = 0; istr_read_len; i)
{
int C = 1; int a = str_encrypt[i], b=a%mod;
for (int j = 0; jpriKey; j)
{
C = (C * b) % mod;
}
str_decrypt[i] = C;
}
str_decrypt[i] = '\0'; printf("解密文是:%s \n", str_decrypt);
}
int main()
{
srand(time(NULL));
while (1)
{
prime1 = randPrime(); prime2 = randPrime(); printf("随机产生两个素数:prime1 = %d , prime2 = %d ", prime1, prime2);
mod = prime1 * prime2; printf("模数:mod = prime1 * prime2 = %d \n", mod); if (modElement_Max) break; // 模数要大于每个加密单元的值
}
eular = (prime1 - 1) * (prime2 - 1);printf("欧拉数:eular=(prime1-1)*(prime2-1) = %d \n", eular);
pubKey = randExponent(); printf("公钥指数:pubKey = %d\n", pubKey);
priKey = inverse(); printf("私钥指数:priKey = %d\n私钥为 (%d, %d)\n", priKey, priKey, mod);
jiami(); jiemi();
return 0;
}
用C语言编写一个与此加密函数对应的解密函数楼主这个加密算法对不同的char a会加密出来的数据不是唯一的 , 是有可能相同的 , 这种加密算法没有办法解密的 。
比如char a = 3 , 加密出来char b = 8;char a = 4,加密出来char b = 8
如果给一个加密后的char b = 8的话,这个是不可能解密出来对应的数据的 。
加密算法要对不同的数据加密出来的数据也要是不同的 。
C语言设计一个简单的加密解密程序C语言设计一个简单的加密解密程序如下:
加密程序代码:
#includestdio.h
main()
{
char c,filename[20];
FILE *fp1,*fp2;
printf("请输入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c=32c=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代码:
#includestdio.h
#includestring.h
main()
{
char c,filename[20];
char yanzhengma[20];
FILE *fp1,*fp2;
printf("请输入待解密文件名:\n");
scanf("%s",filename);
printf("请输入验证码:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c=32c=126)
{
c=126-c;
c=32 c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("验证码错误!请重新输入:\n");
scanf("%s",filename);
}
}
如何用C语言对文件进行加密和解密?对于加密要求不高的完全可以自己定义规则来进行加密 。这种加密是很简单很自由的,例如你在存文件的时候可以将文件中的每个字符都加上一个数 , 然后读取该文件的时候再每个字符相应地减去那个数,即可实现就简单的加密,这样你储存的文件看上去就是乱码了 。只是这个规则太简单,规则你可以自己定,加密与解密对着来就行了 。
下面程序用异或操作对文件进行加密和解密
/******************设计思路******************/
//根据用户输入的加密/机密密码 ,
//每次都拿原文件和密码等长度的一个字符串和密码
//对应元素异或进行加密/解密
//另外因为是用异或方法,所以加密和解密就是同一个程序
//即按照同样的加密即是对文件的解密
#include
#include
#include
#include
#include
charfilename[256];//原文件
charpassword[256];//加密/解密密码
constcharfilenametemp[]="temp15435255435325432543.temp";//加密/解密中间文件
voidinputpass(char*pass);//密码输入以"******"显示
voidmain(){
FILE*fp;//加密/解密的文件
FILE*fptemp;//加密/解密过程临时文件
intpwdlen;//密码长度
inti=0;//计数器
charch=0;//读入的字符
printf("请输入要加密/解密的文件名(全路径名):\n");
gets(filename);
if((fp=fopen(filename,"rb"))==NULL){
printf("找不到文件%s\n",filename);
exit(1);
}//if
printf("请输入要加密/解密的密码:\n");
inputpass(password);
pwdlen=strlen(password);
if(pwdlen==0){
printf("密码不能为空,加密/解密失败\n");
exit(1);
}//if
fptemp=fopen(filenametemp,"wb");//打开中间文件
while(1){
ch=fgetc(fp);//从原文件读入一个字符
if(feof(fp)){//已经读到文件尾
break;//退出循环
}
ch^=password[i];//对原字符和密码进行异或操作
fputc(ch,fptemp);//将异或结果写入中间文件
if(i==pwdlen){//使得原文件每和密码长度相同的固定长度异或加密
i=0;
}
}//while
fclose(fp);//关闭打开原文件
fclose(fptemp);//关闭打开中间文件
remove(filename);//删除原文件
rename(filenametemp,filename);//将中间文件重命名为原文件
printf("加密/解密成功\n");//至此加密/解密成功
}
//密码输入以"******"显示
voidinputpass(char*pass){
inti=0;
charc;
while(isprint(c=getch())){
pass[i]=c;
//printf("*");
}
pass[i]='\0';
printf("\n");
}
【c语言数据加密解密函数 c语言加密解密算法】关于c语言数据加密解密函数和c语言加密解密算法的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读