维吉利亚加密算法 求C或C++源代码 !!急

维吉利亚加密算法 求C或C++源代码 !!急,第1张

#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++的源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10135956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存