#include <stdioh>
#include <iostream>
#include <string>
using namespace std;
void encrypt(char m, char k, char c) //加密算法
{
int i = 0,j=0;
while(m[i] != '\0')
{
if(m[i] >= 'a' && m[i] <= 'z')
{
c[i] = (m[i] - 'a' + k[i%4] - 'a') % 26 + 'a';
i++;
}
else
{
c[i] = (m[i] - 'A' + k[i%4] - 'A') % 26 + 'A';
i++;
}
}
c[i] = '\0';
}
void decrypt(char m, char k, char c) //解密算法
{
int i = 0,j=0;
while(c[i] != '\0')
{
if(c[i] >= 'a' && c[i] <= 'z')
{
m[i] = (c[i] - k[i%4] + 26) % 26 + 'a'; //注意此处
i++;
}
}
m[i] = '\0';
}
void main()
{
int ii = 1, jj,j;
char mm[100];
char kk[100];
printf("enter the k's contest:");
for(j=0;kk[j-1]!='#';j++)
{
kk[j]=getchar();
}
char cc[100];
while(ii)
{
printf("0:Exit 1 : Encrypt 2 : Decrypt\n");
printf("input the number:\n");
scanf("%d",&jj);
switch (jj)
{
case 0:
break;
case 1 : printf("input the original text:\n");
scanf("%s", mm);
encrypt(mm, kk, cc);
printf("%s\n", cc);
break;
case 2 : printf("input the cryptograph:\n");
scanf("%s", cc);
decrypt(mm, kk, cc);
printf("%s\n", mm);
break;
default : break;
}
}
}
你再调试下,有点小错
C语言设计一个简单的加密解密程序如下:
加密程序代码:
#include<stdioh>
main()
{
char
c,filename[20];
FILE
fp1,fp2;
printf("请输入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwentxt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代码:
#include<stdioh>
#include<stringh>
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("yuanwentxt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("验证码错误!请重新输入:\n");
scanf("%s",filename);
}
}
弄乱是说的是“代码混淆”吧,而加密的目的是防止程序被反编译和逆向,所以都不是在C/C++源代码级别上进行的,而是在汇编级别上进行的 *** 作。常用的手段有:加花指令、加壳(可以是加密壳、也可以用虚拟机),建议买本书了解一下,可以看看“加密与解密”这本书,虽然上面的技术都已经过时了(上面的技术都已经有了针对性的技术),但是作为了解和入门还是可以的。
#include<stdioh>
#include<conioh>
#include<stringh>
char password[10]="hunter";
typedef struct
{
char data[6];
int top;
}stacktype;
void initstack(stacktype s)
{
s->top=-1;
}
void push(stacktype s,char x)
{
if(s->top==6)
printf( "stack is full");
else
{
s->top++;
s->data[s->top]=x;
}
}
int pop(stacktype s)
{
if(s->top==-1) return(0);
else s->top--;return(1);
}
char stacktop(stacktype s)
{
char x;
if(s->top==-10) return(0);
else x=s->data[s->top];return(x);
}
void programme(stacktype s)
{
char a;
char b[5];
int i,j,c;
printf( "请输入一个六位数的密码,你只有三次机会:\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=5;j++)
{
c=j;
a=getch();
if((int)a!=8)
{
printf( "");
push(s,a);
}
else
{
printf("\b \b");
j=c-2;
pop(s);
}
}
for(j=5;j>=0;j--)
{
pop(s);
b[j]=stacktop(s);
}
b[6]='\0';
printf( "\n");
if(strcmp(password,b)==0)
{
printf( "密码正确\n");
break;
}
else
{
printf("密码错误,请再试一次!\n");
continue;
}
}
if(i==3)
printf("密码错误,即刻退出\n");
}
void main()
{
stacktype s;
initstack(&s);
programme(&s);
}
这是个范例,你自己研究研究
以上就是关于维吉利亚加密算法 求C或C++源代码 !!急全部的内容,包括:维吉利亚加密算法 求C或C++源代码 !!急、C语言设计一个简单的加密解密程序、如何弄乱或者加密C/C++的源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)