- 浏览: 373321 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
http://www.linuxidc.com/Linux/2012-08/68721.htm
这里(http://www.linuxidc.com/Linux/2012-08/68722.htm)写过了RSA非对称加密解密的交互方式,
其实数字签名也是RSA非对称加密,只不过用私钥加密的,再加上个hash摘要
CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互已经提到关于证书和私钥的数据以及对象获取,这里就不再重复讨论
这里(http://www.linuxidc.com/Linux/2012-08/68722.htm)写过了RSA非对称加密解密的交互方式,
其实数字签名也是RSA非对称加密,只不过用私钥加密的,再加上个hash摘要
CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互已经提到关于证书和私钥的数据以及对象获取,这里就不再重复讨论
1.openssl的签名及验证 void opensslSigner::sign(EVP_PKEY* evpKey,BYTE** signValue,unsigned int &signLen,BYTE* text,int textLen) { EVP_MD_CTX mdctx; //摘要算法上下文变量 if(evpKey == NULL) { printf("EVP_PKEY_new err\n"); return; } //以下是计算签名的代码 EVP_MD_CTX_init(&mdctx); //初始化摘要上下文 if(!EVP_SignInit_ex(&mdctx,EVP_md5(),NULL)) //签名初始化,设置摘要算法 { printf("err\n"); EVP_PKEY_free(evpKey); return; } if(!EVP_SignUpdate(&mdctx,text,textLen)) //计算签名(摘要)Update { printf("err\n"); EVP_PKEY_free(evpKey); return; } if(!EVP_SignFinal(&mdctx,*signValue,&signLen,evpKey)) //签名输出 { printf("err\n"); EVP_PKEY_free(evpKey); return; } printf("消息\"%s\"的签名值是:\n",text); printByte(*signValue,signLen); printf("\n"); EVP_MD_CTX_cleanup(&mdctx); } void opensslSigner::verify(EVP_PKEY* evpKey,BYTE* text,unsigned int textLen,BYTE* signValue,unsigned int signLen) { ERR_load_EVP_strings(); EVP_MD_CTX mdctx; //摘要算法上下文变量 EVP_MD_CTX_init(&mdctx); //初始化摘要上下文 if(!EVP_VerifyInit_ex(&mdctx, EVP_md5(), NULL)) //验证初始化,设置摘要算法,一定要和签名一致 { printf("EVP_VerifyInit_ex err\n"); EVP_PKEY_free(evpKey); return; } if(!EVP_VerifyUpdate(&mdctx, text, textLen)) //验证签名(摘要)Update { printf("err\n"); EVP_PKEY_free(evpKey); return; } if(!EVP_VerifyFinal(&mdctx,signValue,signLen,evpKey)) { printf("verify err\n"); EVP_PKEY_free(evpKey); EVP_MD_CTX_cleanup(&mdctx); return; } else { printf("验证签名正确.\n"); } //释放内存 EVP_PKEY_free(evpKey); EVP_MD_CTX_cleanup(&mdctx); } 2.CryptoAPI的签名验证 依然是私钥的问题,没时间再去尝试导入私钥,暂且只写验证 因为也是RSA加密,所以同样要注意字节排列方式,具体看RSA加密的交互部分 void verify(HCRYPTPROV hProv,PCCERT_CONTEXT cert,BYTE* text,unsigned long len,BYTE* signValue,unsigned long signLen) { //反序与openssl一致 for(int i = 0 ; i < signLen / 2;i++) { BYTE temp = signValue[i]; signValue[i] = signValue[signLen - i - 1]; signValue[signLen - i - 1] = temp; } // 创建离散对象 HCRYPTHASH hHash = NULL; if(!CryptCreateHash( hProv, // 容器句柄 CALG_MD5, // 算法标识 NULL, // 算法使用的Key 0, // 算法标识 &hHash)) // 返回的HASH对象 { printf("CryptCreateHash error:0X%x.\n",GetLastError()); return; } // 计算数据摘要 if(CryptHashData(hHash, text, len, 0) == 0) { printf("CryptHashData error:0X%x.\n",GetLastError()); return; } if(cert == NULL) { printf("pCertContext == NULL:0X%x.\n",GetLastError()); return; } //获取公钥句柄 HCRYPTKEY hPubKey; if(!CryptImportPublicKeyInfo(hProv, cert->dwCertEncodingType, &cert->pCertInfo->SubjectPublicKeyInfo, &hPubKey)) { printf("CryptImportPublicKeyInfo error:0X%x.\n",GetLastError()); return; } //验证签名 if(!CryptVerifySignature(hHash, signValue, signLen, hPubKey, NULL, 0)) { printf("CryptVerifySignature error:0X%x.\n",GetLastError()); return; } cout << "sign verify successfully" << endl; }
发表评论
-
OpenSSL 编译环境搭建
2017-03-27 15:01 9161 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1596OpenSSL命令---rsautl http://blog. ... -
[SM国密算法][OpenSSL] PBOC Offline Data验证之CDA
2014-05-23 16:30 1071void CLibTesterDlg::VerifyIss ... -
[SM国密算法][OpenSSL] PBOC Offline Data验证之DDA
2014-05-23 16:29 801//DDA ////////////////////// ... -
[SM国密算法][OpenSSL] PBOC Offline Data验证之SDA
2014-05-23 16:26 1124void CLibTesterDlg::VerifyIss ... -
[OpenSSL][原]获得文件签名
2012-12-08 14:12 1848测试数据链接:http://jacky-dai.iteye.c ... -
[Open SSL[原]]获得文件信息摘要
2012-12-08 14:03 1073#include <openssl/rsa.h> ... -
利用OpenSSL把导出的Key文本转化为RSA结构
2016-07-21 16:18 979暗色调 撒旦阿斯达是啊 -
OpenSSL 解析P12格式证书文件
2012-05-30 21:07 169241 解压openssl-0.9.8k_WIN32.zip 到 ...
相关推荐
2. **数字签名与验证**:CryptoAPI允许创建和验证数字签名,确保数据的完整性和来源的真实性。这对于防止数据被篡改和假冒至关重要。 3. **哈希计算**:提供MD5、SHA1、SHA256等哈希函数,用于计算文件或数据的唯一...
OpenSSL可以与CryptoAPI进行交互,尤其是在Windows环境中,这使得OpenSSL可以利用CryptoAPI提供的硬件加速等功能。理解如何在OpenSSL代码中调用CryptoAPI函数,以及两者之间的兼容性和差异性,对于跨平台开发是很有...
- **DSO_METHOD**: 描述了如何与动态加载的库交互的方法集。 - **DSO**: 表示动态共享对象本身的数据结构。 **6.4 编程示例** - **加载动态库**: `DSO *dso = DSO_new("path/to/library.so");` - **查询函数**: `...
- **数字签名**:M2Crypto 提供了 RSA、DSA 等非对称加密算法,可以用于生成和验证数字签名,确保数据的完整性和来源的真实性。 - **SSL/TLS 支持**:M2Crypto 可以帮助开发者实现 SSL/TLS 协议,用于安全的网络...
1. **结构与模块**:OpenSSL 的源码结构复杂,主要由几个核心模块组成,如 SSL 库(用于实现 SSL/TLS 协议)、Crypto 库(提供各种加密算法)、ASN.1 编解码器(用于编码和解码证书和私钥)等。理解源码需要熟悉这些...
开发者可以通过这些API实现公钥和私钥对的生成、加密解密以及数字签名等功能,以实现与加密狗的交互。 2. **C++**:C++提供了更底层的控制,可以使用OpenSSL库进行加密和身份验证。通过创建和管理SSL/TLS连接,C++...
5. **API接口**:源代码可能封装了一些常用的API,如Microsoft的CryptoAPI或OpenSSL库,供开发者方便调用签名和验证功能。 6. **文件格式处理**:与PDF或DOCX等文件格式的交互,可能需要理解并操作其内部结构,如...
在VC 6.0环境下,MD5的实现通常涉及C++编程,涉及到Windows API调用或者使用第三方库如CryptoAPI或OpenSSL。 在标题提及的"经典的MD5字符串加密VC 6.0源码"中,我们可以预期源代码会包含以下关键部分: 1. **MD5...
5. **OpenSSL互操作性**:BouncyCastle还允许C#应用与OpenSSL库进行交互,扩展了加密功能。 6. **SSL/TLS协议支持**:在Web应用程序中,BouncyCastle可以帮助实现安全套接层(SSL)和传输层安全(TLS)协议,确保...
Bouncy Castle还提供了一个名为BCrypt的模块,允许Java代码与OpenSSL库进行交互,扩展了Java在加密领域的功能。 **SSL/TLS协议** Bouncy Castle包含一个称为JSSE(Java Secure Socket Extension)的实现,它可以...
10. **MS-CryptoAPI**:Microsoft的CryptoAPI为应用程序提供了加密服务,包括密钥生成、加密解密和数字签名等功能。 11. **CDSA**:Common Data Security Architecture是Sun Microsystems开发的跨平台安全框架,为...
OpenSSL是最常用的证书生成工具,占据了70%的市场份额,其次是微软的Crypto API(19%),以及BouncyCastle、OpenJDK(5%)和其他小众库(2%)。尽管OpenSSL广泛使用,但一项针对开发者(主要为男性)的实证研究表明...
在Go中,虽然标准库`crypto/tls`和`crypto/ecdsa`提供了ECC的支持,但有时候我们可能需要更底层的控制,例如与OpenSSL库直接交互。`elliptic`项目,如`elliptic-master`这个压缩包所示,是yann2192对Go中OpenSSL椭圆...
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于网络安全,包括数字签名、数据加密和身份验证。在PHP中实现RSA公钥基础设施(PKI)加密和解密,可以帮助开发者保护数据免受未经授权的访问。 标题...
PyCryptodome中的非对称加密模块支持生成密钥对、签名验证以及数据加密解密,这对于网络安全和身份验证至关重要。 3. **哈希函数**: 哈希函数用于将任意长度的数据转换为固定长度的摘要,如MD5、SHA-1、SHA-256和...
5. **验证响应**:对银联返回的响应进行解密和签名验证,确保响应的真实性。 ### 支付宝支付接入 对于支付宝支付,其接入流程与银联支付类似,但有支付宝特有的特性: 1. **RSA签名与验证**:支付宝使用RSA公钥/...
在编程中,可以设计自动化备份脚本,使用API接口与云存储服务交互,实现安全可靠的备份。 此外,访问控制也是确保磁盘数据安全的重要手段。操作系统提供了权限管理机制,如Unix的chmod和Windows的NTFS权限设置,...
2. **数字证书**:JavaScript提供了`crypto`模块,可以用来处理与数字证书相关的操作,如解析证书、验证证书链等。数字证书包含了公钥、发行者(即CA)、有效期等信息,用于确认网络实体的真实性。 3. **自签名证书...
5. **Web Cryptography API**:这是现代浏览器提供的一个原生API,允许JavaScript在浏览器环境中进行加密操作,包括对称加密、非对称加密、哈希计算和数字签名等。使用Web Cryptography API可以提高安全性,因为它...