本篇文章给大家谈谈c语言使用密码表加密,以及C语言密码加密对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、用C语言设计一个加密 解密 密码 的程序。2、如何用C语言对文件进行加密和解密?3、C语言实现密码表加密4、使用密码表加密 用C语言5、c语言实现密码加密
用C语言设计一个加密 解密 密码 的程序。
//playFair 加密 你参考下 …
#include”stdio.h”
#include”string.h”
#include”stdlib.h”
#define x 50
char MiYao[x],PassWord[x],AddPass[x],Table[5][5],Map[25];
bool Visit[27]={false};
char English[27]=”abcdefghijklmnopqrstuvwxyz”;
void Input()
{
printf(“请输入密钥:\t”);scanf(“%s”,MiYao);
printf(“请输入待加密密码:\t”);scanf(“%s”,PassWord);
}
void Fun_5x5()
{
int count = 0,V =0;
/*标记密钥内字符为: true*/
for(int i=0;MiYao[i]!=’\0′;i++)
if(strchr(English,MiYao[i])!=NULL)
Visit[strchr(English,MiYao[i])-English] = true;
/*执行密钥矩阵操作 并标记已使用字符:true*/
for(int i=0;i5;i++)
for(int j=0;j5;j++)
{
if(countstrlen(MiYao))
Table[i][j] = MiYao[count++];
else
{
while(Visit[V] != false)V++;
Table[i][j] = English[V];
Visit[V++] = true;
}
}
puts(“∞∞∞密钥矩阵为∞∞∞”);
for(int i=0;i5;i++)
{for(int j=0;j5;j++)
printf(“%3c”,Table[i][j]);
puts(“”);
}
puts(“∞∞∞∞∞∞∞∞∞∞∞”);
}
int IsVisited(char ch)
{
return Visit[strchr(English,ch)-English];//false 未出现过
}
void TabletoMap()
{int count=0;
for(int i=0;i5;i++)
for(int j=0;j5;j++)
Map[count++]=Table[i][j];
Map[count]=’\0′;
}
void Judge()
{
int len = strlen(PassWord),i,j,k;
memset(AddPass,0,sizeof(char));
/*一对对去字母,剩下单个字母,则不变化,直接放入加密串中.*/
if(len%2){
AddPass[len-1] = PassWord[len-1];
len -=1;
}
/*一对中 密钥矩阵中 存在矩阵 eg.ab 先输出a同行顶点在输出b同行顶点*/
int row1,low1,row2,low2,a1,a2;
for(i=0;ilen;i+=2)
{
char c1,c2;
c1 = PassWord[i];
c2 = PassWord[i+1];
/*一对中 两字母相同 无变化*/
/*一对中 有字母不在密钥矩阵中 无变化*/
if(c1 == c2 || ( !IsVisited(c1)||!IsVisited(c2)))
{AddPass[i] = c1;
AddPass[i+1]=c2;
}else{
a1 = strchr(Map,c1)-Map;
row1 = a1/5;low1 = a1%5;
a2 = strchr(Map,c2)-Map;
row2 = a2/5;low2 = a2%5;
/*一对中 字符出现在同行或同列 简单swap字符*/
if(row1 == row2 || low1 == low2)
{
AddPass[i] = c2;
AddPass[i+1] = c1;
}else{
AddPass[i] = Table[row1][low2];
AddPass[i+1] = Table[row2][low1];
}
}
}AddPass[len+1]=’\0′;
puts(“加密后字符串:”);
puts(AddPass);
puts(“原串是:”);
puts(PassWord);
}
int main()
{
Input();
Fun_5x5();
TabletoMap();
Judge();
return 0;
}
如何用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语言实现密码表加密
#includestdio.h
#includestdlib.h
#define N 1024
int find(char *pt,char c)
{
int i,r=-1;
for(i=0;’\0′!=pt[i];i++)
{
if(c==pt[i])
{
r=i;
break;
}
}
return r;
}
int main()
{
char mingwen[]=”abcdefghijklmnopqrstuvwxyz0123456789″;
char miwen[]=”0h12vnugm3zt4albcjdke5sof67pry8w9qxi”;
char buf1[N],buf2[N];
int i,n;
scanf(“%s”,buf1);
for(i=0;’\0′!=buf1[i];i++)
{
if(-1!=(n=find(mingwen,buf1[i])))
{
buf2[i]=miwen[n];
}
else
{
buf2[i]=buf1[i];
}
}
buf2[i]=’\0′;
printf(“%s\n”,buf2);
system(“PAUSE”);
return EXIT_SUCCESS;
}
使用密码表加密 用C语言
密码加密,有很多种方法的,最简单的是单表仿射,也有多表置换之类的。一般都有一个变换公式的。。
你这里看不出来用哪一种方法的。。所以不好写代码。建议,拿本密码学之类的书,看下。
c语言实现密码加密
unsigned char* encrypt(unsigned char* psw, int enc) {
int sum = 0, i;
if (enc) {
for (i = 0; i 6; i++) {
psw[i] -= 15;
sum += psw[i];
}
psw[6] = (unsigned char) sum;
psw[7] = 0;
}
else {
for (i = 0; i 6; i++) {
sum += psw[i];
psw[i] += 15;
}
if ((unsigned char)sum != psw[6]) {
printf(“Bad password\n”);
psw[0] = 0;
return psw;
}
else {
psw[6] = 0;
}
}
for (i = 0; i 3;i++) {
unsigned char t = psw[i];
psw[i] = psw[5-i];
psw[5-i] = t;
}
return psw;
}
int main()
{
unsigned char psw[128];
scanf(“%s”, psw);
printf(“encode to:%s\n”, encrypt(psw, 1));
printf(“decode to:%s\n”, encrypt(psw, 0));
return 0;
}
关于c语言使用密码表加密和C语言密码加密的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。