php AES加密 openssl aes加密解密失败,帮忙看下代码哪里有问题

调用openssl中的evp.h加密解密中出的问题_百度知道
调用openssl中的evp.h加密解密中出的问题
保存后的密文大小不是16的整数倍;/// } outl = outl +//
return 0;/&#47,更不能解密了;////&#47!=NULL)
keyA[i++] = *key++;EVP_EncryptInit_ex()////////%ld\//);// return 0, }&#47,1; EVP_CIPHER_CTX_cleanup(&ctx); &#47,密码上下文关系句柄 EVP_CIPHER_CTX ctx。我调查很久不知道哪出问题了;////
return 0;openssl/O///&#47,猜测是EVP_EncryptUpdate()或EVP_EncryptFinal()中有问题;///&#47,position);/&#47。 下面附上我的代码;);//
}*////获取文件大小 if(position==-1L) {
printf(&);&#47,0;////&#47:#include&&#47!&quot!isSuccess) {
printf(&//&#47,out,
return 0;///&#47,&outltmp);/&#47,NULL);//////&#47.h&/////
fwrite(/#include&/
//
isSuccess=EVP_EncryptInit_ex(& in = new unsigned char [position];////&#47,SEEK_END);/ } fseek(p;/// }/evp,再使用EVP_EncryptUpdate()加密;////// unsigned char *//
while(/////////);
EVP_CIPHER_CTX_cleanup(&ctx);///
fclose(q);/#define IN#define OUT//key为16字节
if(,EVP_aes_128_ecb();&#47,再调用EVP_EncryptFinal()将剩余密文读入密文文件;////&#47。当原文文件大小不是16的整数倍时;//&#47,
IN unsigned char *
fclose(p);/
for(i=0;///&#47,/&#47,p);//加密结束&//// position=ftell(p);//////// if(isS//////////EVP_EncryptUpdate() failed,1;/ 将src中原文读入数组in中 long isS//&#47,&#47,&/ if(;///////&#47,0;//&#47!isSuccess)
printf(&/
fclose(p),
IN int iType){ FILE *p = fopen(szSrc!&/////
/////
return 0;);////);&#47!&/&#47,
IN char * szT///
return 0;//
fclose(p); if(q==NULL) {
printf(&//// fclose(p);///i++)
keyA[i]=0;//
fclose(q);////
i=0;///n&quot,SEEK_SET);/////&#47!=position) {
printf(&/////初始化EVP_CIPHER_CTX;/&#47!isSuccess) {
printf(&/ if(;////
fclose(q);/ FILE *q = fopen(szT/////////
return 0;/ unsigned char *
fclose(p); out = new unsigned char [100000];// if(p==NULL) {
printf(&/////);//////// fclose(q);&#47.h&/////&#47,position);//////////
return 0;);/ isSuccess = fread(EVP_EncryptFinal()///&#47,更够加密解密成功;////);加密结束 printf(&quot,&///////
fclose(q);//&#47!&///////int AesEncryptFile (IN char * szS/rb&//16;/将文件指针指向开头/O////&#47!&////ftell failed&////
fclose(p);/ } fseek(p;/
fclose(p);//
&#47。但当原文大小为16的整数倍时;/);////&#47,q);/// } isSuccess = EVP_EncryptFinal(&/////// printf(&quot,out+/;/&#47,&/ EVP_CIPHER_CTX_init(&ctx);//w+&////fread failed&/////////
}isSuccess = EVP_EncryptUpdate(&/
EVP_CIPHER_CTX_cleanup(&ctx);/
EVP_CIPHER_CTX_cleanup(&ctx);////////&#47,使用的是EVP_aes_128_ecb加密算法;i&lt,NULL就是我先把原文读到一个数组in中,将加密后文件读入密文文件;/////&#47
。请大家帮忙看看。。。加密函数里的错误应该是在开始加密到写入密文文件之间发生的解密函数的代码贴不上了。
提问者采纳
至于写入代码。解密时分析是否曾经加入过数据并在解密前将文件还原[请注意很可能解密时也会出错,没看到什么引起异常的东西。(如果可以的话,有可能由于语言上的差异造成疑问,所以建议你想办法在解密后再还原文件:(假设以上判断正确:&quot。)你可以试试一个双向判断加密时如果正好是16的整数倍在文件头或文件尾加入某些多余数据我没用过这个语言;i&16,因为你的程序只要不加密16的整数倍大小文件就没错;i++)这个可能是算法上的问题。解决;key为16字节2。以下我只是建议(以下是基于我编程时的经验说的;将src中原文读入数组in中&quot?这些是你的代码中的一些涉及到16的代码、for(i=0;&#47。)首先问几个问题、&#47:1;文件应该是字节集吧你用数组做什么呢,所以解答的可能不太正确
提问者评价
谢谢,我再研究下。我改成循环调用EVP_EncryptUpdate(),可以过。可能是文件中数据结束判定有问题。。。
参考资料:
我自己猜出来的
其他类似问题
openssl的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁AES加密/解密速度
发表于 日 16:34 | Hits: 603
Table of Contents
假设我们有2台 千兆网卡的机器AB, 我们想在它们中间加密传数据, 能打满网卡么?
我们用AES 256位加密, 这个问题就是说, AES能达到多大的加密带宽?
openssl 自己的测试工具
$ openssl speed aes-256-cbc
Doing aes-256 cbc for 3s on 16 size blocks: 9568470 aes-256 cbc's in 2.97s
Doing aes-256 cbc for 3s on 64 size blocks: 2539056 aes-256 cbc's in 2.99s
Doing aes-256 cbc for 3s on 256 size blocks: 648494 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 1024 size blocks: 162687 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 8192 size blocks: 20466 aes-256 cbc's in 3.00s
OpenSSL 1.0.1c 10 May 2012
built on: Tue Jul 24 16:47:56 CST 2012
options:bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_TLS1_2_CLIENT -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
1024 bytes
8192 bytes
aes-256 cbc
model name
: Intel(R) Xeon(R) CPU
cache size
$ openssl speed aes-256-cbc
Doing aes-256 cbc for 3s on 16 size blocks:
aes-256 cbc's in 2.95s
Doing aes-256 cbc for 3s on 64 size blocks: 5139523 aes-256 cbc's in 2.98s
Doing aes-256 cbc for 3s on 256 size blocks: 1344415 aes-256 cbc's in 2.97s
Doing aes-256 cbc for 3s on 1024 size blocks: 357930 aes-256 cbc's in 2.98s
Doing aes-256 cbc for 3s on 8192 size blocks: 44507 aes-256 cbc's in 2.98s
OpenSSL 0.9.8k 25 Mar 2009
built on: Tue Jun
4 07:31:34 UTC 2013
options:bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) blowfish(ptr2)
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
1024 bytes
8192 bytes
aes-256 cbc
model name
: Intel(R) Core(TM) i3 CPU
cache size
为啥我的机器性能比服务器好呢... 可能是因为有gpu?
做cpu的公司, 有的也会针对加密做优化, 或者硬件加密卡:
Architecture
cycles/byte
Intel Core 2 Duo (6f6)?
AMD Athlon 64 (15,75,2)?
AMD Athlon 64 (15,75,2)?
放在cpu 上, 一般是说加密每个byte需要多少个cpu cycle.这样的话, 假设一个1G主频的cpu, 每个byte需要10个cycle, 那么每秒可以加密0.1G内容.
int main(int argc, char** argv) {
unsigned char key[AES_BLOCK_SIZE];
// AES_BLOCK_SIZE = 16
unsigned char iv[AES_BLOCK_SIZE];
// init vector
unsigned char* input_
unsigned char* encrypt_
unsigned char* decrypt_
// encrypt length (in multiple of AES_BLOCK_SIZE)
// set the encryption length
len = 256*1024;
input_string = (unsigned char*)calloc(len, sizeof(unsigned char));
// Generate AES 128-bit key
for (i=0; i&16; ++i) {
key[i] = 32 +
// Set encryption key
for (i=0; i&AES_BLOCK_SIZE; ++i) {
iv[i] = 0;
if (AES_set_encrypt_key(key, 128, &aes) & 0) {
fprintf(stderr, &Unable to set encryption key in AES\n&);
// alloc encrypt_string
encrypt_string = (unsigned char*)calloc(len, sizeof(unsigned char));
if (encrypt_string == NULL) {
fprintf(stderr, &Unable to allocate memory for encrypt_string\n&);
for (i=0; i&1024*10; i++) {
// encrypt (iv will change)
AES_cbc_encrypt(input_string, encrypt_string, len, &aes, iv, AES_ENCRYPT);
在公司机器上, 每秒大约80M/s.
评价列表(0)使用openssl中aes加密算法实现文件的加密解密(源代码) - 下载频道
- CSDN.NET
&&&&使用openssl中aes加密算法实现文件的加密解密(源代码)
使用openssl中aes加密算法实现文件的加密解密(源代码)
实现EVP_aes_128(256)_ecb模式,适合初学者熟悉openssl中的加密解密函数。可运行..
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
安全技术下载排行用openssl里带的AES加密函数对txt文件进行加密出现的问题
[问题点数:40分,结帖人zengraoli]
用openssl里带的AES加密函数对txt文件进行加密出现的问题
[问题点数:40分,结帖人zengraoli]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 openssl aes.h 的文章

 

随机推荐