c语言加密算法函数 c语言加密程序怎么写

C语言编程:编写一个函数base64加密#include stdio.h
#include stdlib.h
#include string.h
const char *chlist = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /";
int encode_string(char* str, unsigned int length, char* stat) {
char s[103];
int i,j;
unsigned temp;
if(length = 0) return 1;
if(length100) return 2;
str[length] = '\0';
strcpy(s,str);
while(strlen(s) % 3) strcat(s,"=");
for(i = 0,j = 0; s[i]; i= 3,j= 4) {
temp = s[i];
temp = (temp8)s[i1];
temp = (temp8)s[i2];
stat[j3] = chlist[temp0X3F];
temp = 6;
stat[j2] = chlist[temp0X3F];
temp = 6;
stat[j1] = chlist[temp0X3F];
temp = 6;
stat[j0] = chlist[temp0X3F];
}
stat[j] = '\0';
return 0;
}
int Index(char ch) {
int i;
for(i = 0; chlist[i];i) {
if(chlist[i] == ch)
return i;
}
return -1;
}
void decode_string(char *s, char *t) {
unsigned temp;
int i,j,k,len = strlen(s);
if(len % 4) {
printf("无效数据 。\n");
exit(2);
}
for(i = 0,j = 0; i = len; i= 4,j= 3) {
temp = 0;
for(k = 0; k4;k)
temp = (temp6)Index(s[ik]);
for(k = 2; k = 0; --k) {
t[jk] = temp0XFF;
temp = 8;
}
}
t[jk] = '\0';
}
int main() {
char s[100] = "1a2a3s4dff5fj6u7M8B9P0O1U2";
char t[150],u[100];
printf("s = %s\n",s);
encode_string(s,strlen(s),t);
printf("t = %s\n",t);
decode_string(t,u);
printf("u = %s\n",u);
return 0;
}
C语言 加密算法#include stdio.h
#include string.h
#define MAX_LEN 1024
#define MAX_KEY_LEN 10
/* key必须是1-9之间c语言加密算法函数的数字 */
/* 拥有K个字符c语言加密算法函数的Keyc语言加密算法函数,包含且仅包含1-K */
int CheckKey(char*key)
{
int i,check[MAX_KEY_LEN]={0};
int max=strlen(key);
int keyVal;
for(i=0; imax; i)
{
keyVal = key[i]-'0';
if(keyValmax || keyVal1)
return 0;
if(check[keyVal]==1)
return 0;
else
check[keyVal] = 1;
}
return 1;
}
int Encrypt( char* word, char* key, char* secretWord )
{
int i,start;
int nLenWord = strlen(word);
int nLenKey = strlen(key);
int index[MAX_KEY_LEN];
if(nLenWord % nLenKey != 0)
{
printf("明文的位数不是密钥位数的整数倍c语言加密算法函数!\n");
return 0;
}
for(i=0; inLenKey; i)
{
index[i] = key[i] - '0' -1;
}
/*START 关键代码*/
start = 0;
while(startnLenWord)
{
for(i=0;inLenKey;i)
{
secretWord[starti] = word[startindex[i]];
}
start= nLenKey;
}
secretWord[nLenWord] = '\0';
/* END 关键代码*/
return 1;
}
int main()
{
char word[MAX_LEN];
char key[MAX_KEY_LEN];
char secretWord[MAX_LEN];
printf("请输入明文:");
scanf("24s",word);
printf("请输入密钥:");
scanf("s",key);
if(!CheckKey(key))
{
printf("密钥输入错误!\n");
exit(-1);
}
if(Encrypt(word,key,secretWord))
printf("密文是:%s\n",secretWord);
return 0;
}
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// 加密单元的最大值,这里为一个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;// 公钥指数和私钥指数
// 生成随机素数,实际应用中,这两个质数越大 , 就越难破解 。
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语言加密解密算法这里使用的是按位加密,按ASCII码进行加密的算法自己写个,很容易的 。
#includestdio.h
#includestdlib.h
#includeconio.h
#includestring.h
void
dofile(char
*in_fname,char
*pwd,char
*out_fname);/*对文件进行加密的具体函数*/
void
usage(char
*name);
void
main(int
argc,char
*argv[])/*定义main()函数的命令行参数*/
{
char
in_fname[30];/*用户输入的要加密的文件名*/
char
out_fname[30];
char
pwd[10];/*用来保存密码*/
if(argc!=4)
{/*容错处理*/
usage(argv[0]);
printf("\nIn-fname:\n");
gets(in_fname);/*得到要加密的文件名*/
while(*in_fname==NULL)
{
printf("\nIn-fname:\n");
gets(in_fname);
}
printf("Password
6-8:\n");
gets(pwd);/*得到密码*/
while(*pwd==NULL
||
strlen(pwd)8
||
strlen(pwd)6)
{
printf("Password
6-8:\n");
gets(pwd);
}
printf("Out-file:\n");
gets(out_fname);/*得到加密后你要的文件名*/
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
else
{/*如果命令行参数正确,便直接运行程序*/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
while(*pwd==NULL
||
strlen(pwd)8
||
strlen(pwd)6)
{
printf("Password
faied!\n");
printf("Password
6-8:\n");
gets(pwd);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
}
/*加密子函数开始*/
void
dofile(char
*in_fname,char
*pwd,char
*out_file)
{
FILE
*fp1,*fp2;
register
char
ch;
int
j=0;
int
j0=strlen(pwd);
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot
open
in-file.\n");
exit(1);/*如果不能打开要加密的文件,便退出程序*/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot
open
or
create
out-file.\n");
exit(1);/*如果不能建立加密后的文件,便退出*/
}
/*加密算法开始*/
while(j0=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j=j0?j=0:j],fp2);/*异或后写入fp2文件*/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/*关闭源文件*/
fclose(fp2);/*关闭目标文件*/
}
void
usage(char
*name)
{
printf("\t=======================File
encryption======================\n");
printf("\tusage:
%s
In-fname
password
out_fname\n",name);
printf("\tExample:
%s
file1.txt
12345678
file2.txt\n",name);
}
【c语言加密算法函数 c语言加密程序怎么写】c语言加密算法函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言加密程序怎么写、c语言加密算法函数的信息别忘了在本站进行查找喔 。

    推荐阅读