当前位置:首页 » 编程语言 » c语言实现aes加密解密

c语言实现aes加密解密

发布时间: 2023-04-28 18:01:11

c语言文件加密和解密

c语言文件加密和解密方法如下:

1、首先打开VC++6.0;

voidDecryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=ch^pwd;
ch=(ch-'a'+25)%26+'a';
}
if((ch>='A')&&(ch<='Z'))
{
ch=ch^pwd;
ch=(ch-'A'+25)%26+'A';
}
fputc(ch,dfp);
}
}

输出函数,输出文件内容
voidOutputFile(FILE*fp)
{
charch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}
主函数,主要调用这几个函数
intmain()
{
/*用户输入的要加密的文件名*/
charsfilename[20];
/*用户输入加密后保存的文件名*/
chardfilename[20];
/*用来保存密码字符*/
charpwd;
FILE*sfp,*dfp;

printf(": ");
/*得到要加密的文件名*/
gets(sfilename);
/*得到加密后你要的文件名*/
printf(": ");
gets(dfilename);
/*得到加密字符*/
printf("PleaseinputyourPassword: ");
//scanf("%c",&pwd);
pwd=getch();
/*屏幕以*来表示输入的加密字符*/
printf("* ");
/*以只读方式打开要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can'topenthefile:%s ",sfilename);
exit(0);
}
/*输出要加密的文件*/
printf(": ");
OutputFile(sfp);
/*建立加密后的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can'topenorcreatethefile:%s ",dfilename);
//exit(0);
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET);
EncryptFile(sfp,dfp,pwd);
printf(" Encryptedthefilesuccessfully! ");
/*输出加密后的文件*/
printf(": ");
fseek(dfp,0L,SEEK_SET);
OutputFile(dfp);
fclose(sfp);
fclose(dfp);
getch();
return0;
}


❷ 谁能给我一个C语言写的AES CBC加解密源码

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/aes.h>
#include "encode.h"

int encode(char *content,int way)
{
AES_KEY aes;
unsigned char key[AES_BLOCK_SIZE];
unsigned char iv[AES_BLOCK_SIZE];
unsigned char *encrypt_string;
unsigned char *input_string;
int len,i;

/*Set Input string*/
if((strlen(content)+1)%AES_BLOCK_SIZE==0)
len=strlen(content)+1;
else
len=((strlen(content)+1)/AES_BLOCK_SIZE+1)*AES_BLOCK_SIZE;
input_string=(unsigned char *)calloc(len,sizeof(unsigned char));
if(input_string==NULL)
return -1;
strncpy(input_string,content,strlen(content));

for(i=0;i<16;++i)
key[i]=i+12;
for(i=0;i<AES_BLOCK_SIZE;++i)
iv[i]=i;
if(way==0)
{
if(AES_set_encrypt_key(key,128,&aes)<0)
return -1;
}
else
{
if(AES_set_decrypt_key(key,128,&aes)<0)
return -1;
}

encrypt_string=(unsigned char *)calloc(len,sizeof(unsigned char));
if(encrypt_string==NULL)
return -1;
if(way==0)
AES_cbc_encrypt(input_string,encrypt_string,len,&aes,iv,AES_ENCRYPT);
else
AES_cbc_encrypt(input_string,encrypt_string,len,&aes,iv,AES_DECRYPT);
strcpy(content,(char *)encrypt_string);

free(input_string);
free(encrypt_string);

return 0;
}

❸ 使用C/C++语言,将DES/AES加密算法,用代码实现

哎,学校大作业吧。核心是des和aes的算法呗,自己一点点写代码量不很少呢。没时间给你写了。
不过有个很好的偷懒办法:建议lz你去找一下OpenSSL的源码。里面有AES,DES的原生C实现。现成函数。lz你直接从里面抠出来复制到你工程里就行了。。

❹ 如何用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#的AES加密解密问题

不是初学,而是对.net中所有的加解密方式都没有弄清楚。不过别灰心——很多自以为会的人也没有弄清。
首先,.net中类库中支持各类摘要加解密方式。一般情况下我们将安全分为两类,一类是摘要,一类是加解密。加密解又分为对称与非对称加解密。
在.net体系中,不管是摘要还是加解密,为了统一算法方式,一律都是流方式进行的。不管是MD5摘要还是ADE/DES/TDES/RSA等等。一定要记住的第一条,是流方式进行的!
流——这个概念很多人也不清楚,因为stream的范围还是非常的大的,有网络流responseStream等,基本文本流,IO流等等,在加密时我们使用了一个流叫“加解密流”CryptStream,该流用来实现加解密及摘要算法等等。
那么CryptoStream是个什么流呢?它算是转换流,把一种形式转换成另一种形式,比如把密文转换成明文或把明文换成密文。正常的情况下,我们可以用流写流的方式来实现,比如MemoryStream来换流。当然,也可以把byte[]数组直接写到流中。
流这部分说完了,那么,其实我们如何区别CryptoStream是加密还是解密呢,除了说明之外,还是一个方式,就是看流的方式是读还是写!所以当我看到你的解密流中使用的方式竟然是Write,而不是Read,所以你对加解密方式并没有真正理解。
比如,我们可以转换后的流直接进行ReadToLine即可。
老实说,你这种写法有很大问题——有关stream大部分都是非托管,所以一定要记着Dispose,或Close(Close时会自动调用Dispose)。防止出现错误等内存泄露。
有于加解密流,我们经常一句话,加密方式是Write,解密方式是Read!

❻ C# AES数据加密

使用对称加密算法AES
加密通常有对称加密(DES、AES)、非对称加密(RSA)、单向加密(MD5不可复原),非对称算法很安全但是速度慢一般用于传输对称加密的秘钥,本文主要介绍C#如何使用基于AES标准的Rijndael算法对数据包进行加密传输。

RijndaelManaged类为Rijndael算法管理类。这里有几个主要参数,单位都是bit:BlockSize、FeedbackSize、KeySize、Mode、Padding。这些参数可以影响私钥和IV长度,以及数据加密方式等。

ICryptoTransform为数据转换接口,有TransformBlock和TransformFinalBlock两个方法,这两个方法基本一样,主要是TransformBlock要求被处理数组需为InputBlockSize的整数倍,因为需要使用缓存减少GC这里在外部实现TransformFinalBlock中做的处理。

下方方法都是参照RijndaelManagedTransform.cs的 源码 实现的,对一个字节数组加密前需要先调用CheckBlock,返回值为存储加密后的数组大小。

加密与解密操作

网络数据传输

❼ c/c++实现AES加密,支持cbc等加密模式,支持多种填充模式,不要openssl实现的

使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式陪搜(这个模式会自动设置各种环境变量)
、解压缩openssl的包,进入openssl的目录
、perl configure VC-WIN32
尽量在这个目录下执行该命令,否则郑祥找不到Configure文件,或者指定完芦丛历整的Configure文件路径。
、ms\do_ms
解压目录下执行ms\do_ms命令
、nmake -f ms\ntdll.mak编译后在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件
注意:在运行第五步时,cl编译器会抱怨说.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:
warning treated as error - no object file generated
/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.
是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。
于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。

❽ 谁知道哪里有AES算法加密,解密c++/C语言代码

推荐用java,因为有现成的class给你用。。。如果用C++有好多东西需要自己写。可能java里面20行能搞定加密和解密的所有步骤,如果C++自己把所有算法加上各种数据类型转换之类的,无法估计多多少倍的代码了。前提还是你已经会写如果做密钥。

热点内容
爱情脚本短 发布:2025-07-20 09:56:44 浏览:679
存款机的安全密码是什么 发布:2025-07-20 09:53:03 浏览:32
手机如何清理空文件夹 发布:2025-07-20 09:40:35 浏览:72
什么软件可以编译文件 发布:2025-07-20 09:35:17 浏览:961
可编程控制器的定义 发布:2025-07-20 09:28:10 浏览:390
陌陌会员访问不留痕迹 发布:2025-07-20 09:28:08 浏览:308
x27热点密码是多少 发布:2025-07-20 09:03:19 浏览:577
c语言编码生日快乐 发布:2025-07-20 08:56:56 浏览:390
服务器北京云空间 发布:2025-07-20 08:55:29 浏览:261
秦皇岛少儿编程 发布:2025-07-20 08:55:19 浏览:63