字符串未使用 <openssl/aes>正确解密
String not decrypted properly using <openssl/aes>
我想写一个简单的程序,用<openssl/aes.h>
加密一个测试,同时解密它
在这里添加我的全部代码:
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
#include <string.h>
int main(void)
{
//encryption testing
unsigned char inputb[2048] = {' '};
unsigned char encpb[2048]= {' '};
unsigned char opb[2048]= {' '};
#define MAX_SIZE 100
unsigned char oneKey[] = "6BC1BEE22E409F96E93D7E117393172A";
AES_KEY key;
AES_KEY key1;
char testchat[] = "!!!test doctors file!!! @Hospitan name(norman) SICKAPP_NAME=9873471093 @Duration (Duration
of doctor visitdfwhedf in months)higibujiji TESTATION=-5 #Expiry date MADICINE_NAME=678041783478n";
char NULL_byte[16] = {0};
memcpy((char*)inputb, (testchat), strlen(testchat)+1);
printf("nninputb= %s strlen(testchat)=%d nn",inputb, strlen(testchat));
AES_set_encrypt_key(oneKey, 128, &key);
unsigned char tmp_char[50] = {' '};
char* pChar = (char*)inputb;
unsigned char tmp_char_encpb[MAX_SIZE];
while(*pChar != ' ') {
memset(tmp_char, ' ', 50);
memset(tmp_char_encpb, ' ', MAX_SIZE);
if(strlen(pChar) < 16) {
strncpy((char*)tmp_char, (char*)pChar, strlen(pChar)+1);
strncat((char*)tmp_char, NULL_byte, 16 - strlen(pChar)+1);
}
else
strncpy((char*)tmp_char, (char*)pChar, 16);
printf("Line:%d tmp_char = %s pChar=%dn", __LINE__, tmp_char, strlen(pChar));
AES_encrypt(tmp_char, tmp_char_encpb, &key);
strcat((char*)encpb, (char*)tmp_char_encpb);
pChar += 16;
}
printf("len encpb=%dn", strlen((char*)encpb));
//now test with decrypting and check if all okk....
unsigned char oneKey1[] = "6BC1BEE22E409F96E93D7E117393172A";
AES_set_decrypt_key(oneKey1,128,&key1);
unsigned char tmp_char_dencpb[MAX_SIZE];
pChar = (char*)encpb;
while(*pChar != ' ') {
memset(tmp_char, ' ', 50);
if(strlen(pChar) < 16) {
strncpy((char*)tmp_char, (char*)pChar, strlen(pChar)+1);
strncat((char*)tmp_char, NULL_byte, 16 - strlen(pChar)+1);
}
else
strncpy((char*)tmp_char, (char*)pChar, 16);
AES_decrypt(tmp_char, tmp_char_dencpb, &key1);
strncat((char*)opb, (char*)tmp_char_dencpb,16);
memset(tmp_char_dencpb, ' ', MAX_SIZE);
pChar += 16;
}
printf("nnopb = %snn",opb);
return 0;
}
我正在通过进行构建
g++ mytest.cpp -lssl -lcrypto
通过GDB:运行
Program received signal SIGSEGV, Segmentation fault.
0x0000003e48437122 in ____strtoll_l_internal () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.47.el6_2.12.x86_64 keyutils-libs-1.4-3.el6.x86_64 krb5-libs-1.9-22.el6_2.1.x86_64 libcom_err-1.41.12-11.el6.x86_64 libgcc-4.4.6-3.el6.x86_64 libselinux-2.0.94-5.2.el6.x86_64 libstdc++-4.4.6-3.el6.x86_64 openssl-1.0.0-20.el6_2.4.x86_64 zlib-1.2.3-27.el6.x86_64
(gdb) backtrace
#0 0x0000003e48437122 in ____strtoll_l_internal () from /lib64/libc.so.6
#1 0x0000000000400e9b in GetExpiryDate (exp_date=0x7fffffffd970) at LicReader.cpp:66
#2 0x0000000000400eeb in IsLicenseExpired () at LicReader.cpp:74
#3 0x0000000000400f3b in main (argc=1, argv=0x7fffffffda88) at LicReader.cpp:86
(gdb)
OP:一段时间后,我得到了当前解密的字符串,还有一段时间得到了垃圾字符。(当i/p字符串更改时)
我错过什么了吗?有人能说出为什么AES_decrypt不能在gsometimes中工作吗?
零终止字符串操作不是管理加密数据的方法。。。例如,您使用strcat
将加密数据添加到encpb
。。。但是,如果加密数据中有一个零,会发生什么呢?结果是你没有得到所有的数据。处理实际的块大小,即16字节。如果您加密的数据不是16字节的倍数,会发生什么?你必须把它加成16的倍数。怎样有很多不同的方式,比如PKCS7。另外,你应该研究密码块链接和盐析。。。有很多东西要学!
相关文章:
- AES加密到解密未正确输出
- 为什么这不是解密
- EASTL矢量<向量<int>>连续的
- 通过 Openssl 命令行加密,通过 c++ 解密
- OpenSSL 解密功能无法正常工作
- 仿射密码解密,输出大小写不同
- 将加密消息从 php 发送到 C++ 应用程序,然后使用 CryptoPP 进行解密
- 私钥解密代码使用公共接口说明符到 BSAFE 库 v6.0?
- POCO C++加密/解密
- 从加密项目向量中解密任意选择的元素会导致无效的 PKCS #7 块错误
- 尝试从 Visual Studios C++ 中的加密字符串输出解密字符串时出现逻辑错误
- OpenSSL RSA 解密随机失败 C/C++
- 压缩天然气.AES.错误解密(可能加密)的文件
- C++ - 从文件解密字符串
- C++ - 如何从上到下制作 4x4 矩阵和 cout 列(需要解密字符串)
- 运行密钥密码解密知道密钥?
- 如何在c ++中使用XOR解密文件?
- 如何制作一个程序,它使用特定单词加密和解密消息?
- 基本加密和解密方法不起作用 C++ 11.
- 凯撒密码在C++中无法正确解密的问题