#include "sm4enc.h"
#include <openssl/evp.h>
#include <QDebug>
sm4enc::sm4enc()
{
}
QByteArray sm4enc::sm4Encrypt(const QByteArray& data, const QByteArray& key)
{
EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
if (!ctx)
{
qDebug() << "Failed to create context.";
return QByteArray();
}
if (1 != EVP_EncryptInit_ex(ctx, EVP_sm4_ecb(), nullptr, reinterpret_cast<const unsigned char*>(key.data()), nullptr))
{
EVP_CIPHER_CTX_free(ctx);
qDebug() << "Failed to initialize encryption.";
return QByteArray();
}
QByteArray encryptedData;
encryptedData.resize(data.size() + EVP_CIPHER_block_size(EVP_sm4_ecb()));
int len = 0;
int encryptedLen = 0;
if (1 != EVP_EncryptUpdate(ctx, reinterpret_cast<unsigned char*>(encryptedData.data()), &len, reinterpret_cast<const unsigned char*>(data.data()), data.size()))
{
EVP_CIPHER_CTX_free(ctx);
qDebug() << "Encryption failed.";
return QByteArray();
}
encryptedLen = len;
if (1 != EVP_EncryptFinal_ex(ctx, reinterpret_cast<unsigned char*>(encryptedData.data()) + len, &len))
{
EVP_CIPHER_CTX_free(ctx);
qDebug() << "Final encryption step failed.";
return QByteArray();
}
encryptedLen += len;
EVP_CIPHER_CTX_free(ctx);
encryptedData.resize(encryptedLen);
return encryptedData;
}
QByteArray sm4enc::sm4Decrypt(const QByteArray& data, const QByteArray& key)
{
EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
if (!ctx)
{
qDebug() << "Failed to create context.";
return QByteArray();
}
if (1 != EVP_DecryptInit_ex(ctx, EVP_sm4_ecb(), nullptr, reinterpret_cast<const unsigned char*>(key.data()), nullptr))
{
EVP_CIPHER_CTX_free(ctx);
qDebug() << "Failed to initialize decryption.";
return QByteArray();
}
QByteArray decryptedData;
decryptedData.resize(data.size());
int len = 0;
int decryptedLen = 0;
if (1 != EVP_DecryptUpdate(ctx, reinterpret_cast<unsigned char*>(decryptedData.data()), &len, reinterpret_cast<const unsigned char*>(data.data()), data.size()))
{
EVP_CIPHER_CTX_free(ctx);
qDebug() << "Decryption failed.";
return QByteArray();
}
decryptedLen = len;
if (1 != EVP_DecryptFinal_ex(ctx, reinterpret_cast<unsigned char*>(decryptedData.data()) + len, &len))
{
EVP_CIPHER_CTX_free(ctx);
qDebug() << "Final decryption step failed.";
return QByteArray();
}
decryptedLen += len;
EVP_CIPHER_CTX_free(ctx);
decryptedData.resize(decryptedLen);
return decryptedData;
}
没有合适的资源?快使用搜索试试~ 我知道了~
linux Qt+sm4文件加解密
需积分: 5 0 下载量 170 浏览量
2024-08-05
16:30:44
上传
评论
收藏 7.86MB GZ 举报
温馨提示
linux Qt+sm4文件加解密
资源推荐
资源详情
资源评论
收起资源包目录
linux Qt+sm4文件加解密 (234个子文件)
libcrypto.so.3 4.96MB
libssl.so.3 945KB
libcrypto.a 8.91MB
libssl.a 1.53MB
sm4enc.cpp 3KB
mainwindow.cpp 2KB
main.cpp 172B
obj_mac.h 174KB
ssl.h 136KB
evp.h 98KB
x509v3.h 91KB
ec.h 88KB
cryptoerr_legacy.h 78KB
x509.h 73KB
asn1.h 60KB
tls1.h 53KB
x509_vfy.h 51KB
core_dispatch.h 46KB
cmp.h 40KB
engine.h 39KB
bio.h 39KB
asn1t.h 36KB
evp.h 36KB
cms.h 33KB
ocsp.h 29KB
core_names.h 29KB
rsa.h 27KB
sslerr_legacy.h 26KB
bn.h 26KB
pem.h 25KB
crypto.h 24KB
ct.h 22KB
pkcs7.h 22KB
err.h 21KB
sslerr.h 21KB
aes_platform.h 19KB
ts.h 19KB
pkcs12.h 19KB
ui.h 19KB
safestack.h 18KB
bulletproofs.h 18KB
srp.h 15KB
dh.h 15KB
store.h 15KB
crmf.h 14KB
ssl3.h 14KB
lhash.h 14KB
x509.h 13KB
dsa.h 12KB
modes.h 11KB
conf.h 10KB
trace.h 10KB
macros.h 10KB
paillier.h 9KB
ess.h 9KB
des.h 8KB
e_os2.h 8KB
proverr.h 8KB
md32_common.h 8KB
core.h 8KB
asn1err.h 8KB
types.h 7KB
params.h 7KB
evperr.h 7KB
nizk.h 7KB
modes.h 7KB
objects.h 7KB
cmserr.h 6KB
asn1.h 6KB
rsa.h 6KB
cmperr.h 6KB
decoder.h 6KB
rsaerr.h 6KB
kdf.h 5KB
ecerr.h 5KB
encoder.h 5KB
http.h 5KB
ecx.h 5KB
bn.h 5KB
rand_pool.h 5KB
x509v3err.h 5KB
sha.h 5KB
ec.h 4KB
configuration.h 4KB
rand.h 4KB
ntls.h 4KB
self_test.h 4KB
opensslv.h 4KB
rand.h 4KB
aes.h 4KB
sm2.h 3KB
stack.h 3KB
randerr.h 3KB
x509err.h 3KB
sparse_array.h 3KB
async.h 3KB
bioerr.h 3KB
tserr.h 3KB
ctype.h 3KB
pkcs7err.h 3KB
共 234 条
- 1
- 2
- 3
资源评论
sudoks
- 粉丝: 57
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功