测试数据链接:
http://jacky-dai.iteye.com/admin/blogs/1743774
#include <openssl/rsa.h>
#include <openssl/evp.h>
#pragma comment(lib, "libeay32.lib")
void ReverseBuffer(unsigned char *pBuf, unsigned long ulLen)
{
if(0 == ulLen)
{
return;
}
//char tmp;
unsigned char ucTemp;
for(unsigned long i = 0, j = ulLen-1; i < ulLen/2; i++, j--)
{
ucTemp = pBuf[i];
pBuf[i] = pBuf[j];
pBuf[j] = ucTemp;
}
}
void OpenSSLGenFileSignature_byFile()
{
RSA* rsa = RSA_new();
MSkeyConvertToOpenSSLKey("Test_1024_Key.prv", *rsa);
EVP_PKEY *evpKey = EVP_PKEY_new(); //新建一个EVP_PKEY变量
EVP_PKEY_set1_RSA(evpKey, rsa);
const EVP_MD* algrothm = EVP_sha1();
EVP_MD_CTX mdctx;
EVP_MD_CTX_init(&mdctx);
EVP_VerifyInit_ex(&mdctx, algrothm, NULL);
byte file[512] = {0};
DWORD dwFileSize = sizeof(file);
ReadBufferFromFile("PublicKey.bin", file, &dwFileSize);
EVP_SignUpdate(&mdctx, file, dwFileSize);
BYTE signValue[128] = {0};
UINT signLen = 0;
EVP_SignFinal(&mdctx, signValue, &signLen, evpKey);
EVP_MD_CTX_cleanup(&mdctx);
EVP_PKEY_free(evpKey);
RSA_free(rsa);
}
void OpenSSLGenFileSignature_byFileHash()
{
RSA* rsa = RSA_new();
MSkeyConvertToOpenSSLKey("Test_1024_Key.prv", *rsa);
const EVP_MD* algrothm = EVP_sha1();
byte byHashData[32] = {0};
DWORD dwHashSize = sizeof(byHashData);
ReadBufferFromFile("HashData.bin", byHashData, &dwHashSize);
ReverseBuffer(byHashData, dwHashSize);
byte bySignedBuf[512] = {0};
UINT nSignSize = 0;
int nRet = RSA_sign(algrothm->type, byHashData, (UINT)dwHashSize, bySignedBuf, &nSignSize, rsa);
RSA_free(rsa);
}
This example digests the data ``Test Message\n'' and ``Hello World\n'', using the digest name passed on the command line.
#include <stdio.h>
#include <openssl/evp.h>
main(int argc, char *argv[])
{
EVP_MD_CTX *mdctx;
const EVP_MD *md;
char mess1[] = "Test Message\n";
char mess2[] = "Hello World\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;
OpenSSL_add_all_digests();
if(!argv[1]) {
printf("Usage: mdtest digestname\n");
exit(1);
}
md = EVP_get_digestbyname(argv[1]);
if(!md) {
printf("Unknown message digest %s\n", argv[1]);
exit(1);
}
mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
EVP_MD_CTX_destroy(mdctx);
printf("Digest is: ");
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
printf("\n");
}
#include <openssl/rsa.h>
#include <openssl/evp.h>
//////////////////////////////////////////////////////
void OpenSSL_Test_SHA1(void)
{
const EVP_MD* algrothm = EVP_sha1();
EVP_MD_CTX mdctx;
BYTE file[6] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
BYTE signValue[128] = {0};
UINT signLen = 0;
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, EVP_sha1(), NULL);
EVP_DigestUpdate(&mdctx, file, 6);
EVP_DigestFinal_ex(&mdctx, signValue, &signLen);
printf("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
PrintHexBuffer(signValue, signLen);
//7C4A8D09CA3762AF61E59520943DC26494F8941B
}
分享到:
相关推荐
例如,你可以使用 OpenSSL 的 API 来创建自签名证书,进行数据加解密,或者在应用程序中实现 HTTPS 连接。 总的来说,OpenSSL 在 Windows x64 平台上的编译和使用是一项关键的任务,它为开发者提供了强大的加密功能...
原版存在接口不匹配和版本过低的问题,这些问题在修正版中得到了修复,升级了OpenSSL到1.0.1b版本。在OpenSSL的不同版本中,其内部结构和API可能会有所调整,因此,当升级版本时,必须确保Delphi的封装代码与新版本...
标题“openssl-patch.rar”指的是一个修复OpenSSL的补丁文件,特别针对Windows XP操作系统。在Windows XP系统中,由于其原始代码自带的数字证书可能已经过期,这可能导致在编译新代码或安装某些软件时遇到问题。...
Android OpenSSL 是一个专门为Android平台定制的OpenSSL库,它包含了OpenSSL的源代码以及使用NDK(Native Development Kit)编译后的二进制文件。OpenSSL是一个强大的安全套接层(SSL/TLS)协议实现,同时也包括了...
标题中的“OpenSSL[原]获得文件信息摘要”指的是使用OpenSSL库来获取文件的哈希摘要信息。OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现,同时也包含了一些用于加密、解密、生成摘要以及数字...
2. **获取OpenSSL源码**:解压openssl-1.0.2l.tar.gz文件,得到openssl-1.0.2l源代码目录。这个目录应该包含了一系列的源代码文件和构建脚本。 3. **配置环境**:打开命令提示符,进入openssl-1.0.2l源代码目录。...
在IT行业中,加密技术是确保数据安全的重要手段之一,而SM2算法作为我国自主研发的公钥密码算法,因其高效性和安全性,在很多领域得到了广泛应用。本文将深入探讨如何使用Delphi原生实现SM2加解密以及压缩解压缩的...
4. `libcrypto-1_1.dll` 和 `libssl-1_1.dll`:这些是OpenSSL库的动态链接文件,用于加密和安全套接层(SSL)通信。它们对于Python进行HTTPS请求和其他加密操作至关重要。 5. `sqlite3.dll`:这是SQLite数据库引擎...
这两个文件是OpenSSL库的一部分,用于实现加密和安全套接层(SSL/TLS)协议,是HTTPS安全通信的核心组件。在访问使用HTTPS的网站时,这些文件是必不可少的,因为它们提供了必要的加密算法和证书验证功能。没有它们,...
一、论述题(40 分):以文件网络传输的安全性分析为例,阐述PKI系统产生的必要性与基本技术特点分析。 随着网络的发展,信息安全已成为焦点问题之一,尤其是网上支付和网络银行对信息安全的要求显得更为突出。为了...
这种算法的设计目的是为数据提供不可逆的、唯一的标识,常用于验证数据完整性、数字签名和加密证书等场景。 在C++中实现SHA-256算法,你需要理解以下几个关键步骤: 1. **初始化哈希值**:SHA-256算法开始时会使用...