`

sha1withRSA md5withRSA分析

 
阅读更多

source:http://m.blog.csdn.net/blog/jiftlixu/19159345

原理分析:http://blog.csdn.net/zhuojiuyihu/article/details/5930043

sha1withRSA md5withRSA分析

2014-2-13阅读115 评论0

sha1withRSA哈希算法分析

参考资料

  http://stackoverflow.com/questions/7646259/can-any-one-tell-what-i2d-x509-sig-function-do

  http://www.cnblogs.com/adylee/archive/2009/08/03/1537813.html

 

提问帖子

can any one tell what i2d_X509_SIG() function do..?

i am using openssl 0.9.8g. inside RSA_verify() function decrypoted data is given to the d21_X509_SIG function. what does this function do and why we are doing this step while signing and verifying the signature

我正在使用openssl 0.98g.RSA_verify()函数解密数据调用了d2i_x509_sig函数,这个函数到底实现了什么,我们正在做签名和验签的项目。(译者:翻译不好见笑了)

 

openssl
asked Oct 4 '11 at 10:08

 

1 Answer


The signature is actually not just for the hash (e.g. SHA-256), but for a data structure containing the hash plus some metadata (which hashing algorithm, some parameters and the hash length).That's why after decrypting, the data is decoded into a X509_SIG object and the actual comparison against the reference only performed on sig->digest->data.

这个签名事实上不仅是哈希(例如,SHA-256),而是一个哈希加上一些数据元素(哈希算法、一些参数和哈希长度)。这就是为什么解密到X509_SIG结构的和

sig->digest->data的数据不一致。

 

 

 

 

示例数据一

-------------------------------------------------------------------------------------------------------------------------------------------

哈希算法:sha1

签名
3eda2b913d484b2ec347fe68200f25aadc041e1d199e1f288178bcbd08ad8d7009c17ac44d4de88286b8430553ba61948d317d1c06bd9b3359a08a57e9ce22503e982840b8b6e392ba4d793c5a3012f42edc88daf92376c1efe099ba4f9a045b1fe26c80290bcafe93f438aa2854eb89398896686b6f08932c7c26e7463154920bfeb75726cae1fdba3d26f2a11313def6b4b2c4cf8716c50403c0c928affda0652671dcd5cc66c72fd89d635850179dafe0adfb211e470ac5c9ee39ff012b44d0a9b707f96356f6f1e0ecb85a8ed18951bec317d30af0fa7998dc946123b7e2900600f65e2d66d089602c7b2aae713b55f9575a69ac4011080c24b877ad60bb

公钥数据
3082010a0282010100a01ba9a2d772a1959533752c64f5cee4b5534e14c605b297bcbc23c6d4e9d083ffc3238c95a2c881f989106fec5dc4427ffb4b9358d6ded2ae7d87b8e447b597c921ae6054c77a2545283778d297ade3b15e77df0cd2eba51e8224ff0ca5c970a0e170134195e9c99ba4568f9c7295343c442447015e40d867f2db8a47ac56f7ec4e3596c3bc04e7c9e0a7a58f0ff3070b681017e45fea4f55a0e6e5ff28169f66b4b2da919229427be4be6c7ddb4c69270399bf0e3d990f67e116ddce96f7af323eb8373cf81d6c6118d2c32fffb16ff3d055e4cf1276a0a9e172fb6a17f016638ecf855c6e05b41253af84916c3da54de4a673d1ffe6c44b343fa367ba890f0203010001

解密结果
0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004149bb631ae07153885e2d3ae693f0ff86ebf5d6f51

3021300906052b0e03021a050004149bb631ae07153885e2d3ae693f0ff86ebf5d6f51(35字节 ? + 哈希值20字节)

sha1哈希值应该是20字节

数据拆分(ASN.1 结构

30(类型Sequence) 21(总长度) 30(类型Sequence) 09(长度) 06052b0e03021a 05(类型NULL)00(长度为0)  04(类型字符串) 14(长度) 9bb631ae07153885e2d3ae693f0ff86ebf5d6f51(20字节哈希值)

示例数据二

----------------------------------------------------------------------------------------

 

为了验证X509_sign调用PKCS#11接口的情况,自己实现了一个PKCS#11的包装壳(68个导出函数),实现时注意C_GetFunctionList应该指向本包装壳的函数,不然错误的使用实际的C_GetFunctionList作返回结构便也就失去意义了。X509_sign的调用方式还是不同的,java中如果使用SHA1WithRSA传入到PKCS#11接口的C_Sign或者C_SignUpdate的数据是完整的明文,但是X509_sign传入的是一个ASN.1 Sequence的一个结构,结构中包含待签名数据的摘要散列。

举例来说:

 

待加密的数据是Hello World! ,在C_Sign传入的数据中就可以发现Hello World!的SHA-1的摘要散列。

待加密:Hello World!

SHA-1: 2EF7BDE608CE5404E97D5F042F95F89F1C232871 

C_Sign:

30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 2e f7 bd e6 08 ce 54 04 e9 7d 5f 04 2f 95 f8 9f 1c 23 28 71 

使用ASN.1dump来观察就看的更加清楚了。

 

帖子截图:

 

分享到:
评论

相关推荐

    sha1withrsa算法 华为sha256withrsa算法

    标题中的“sha1withrsa”和“华为sha256withrsa”算法是两种常见的公钥加密算法在数字签名过程中的应用。这两种算法都属于非对称加密算法的一部分,广泛用于确保数据完整性和认证发送者身份。在此,我们主要探讨它们...

    Delphi RSA签名与验签【支持SHA1WithRSA、SHA256WithRSA和MD5WithRSA,秘钥PKCS8和PKCS1】D7~XE10可用

    delphi RSA签名与验签】支持三种方式签名与验签(SHA1WithRSA、SHA256WithRSA和MD5WithRSA),秘钥格式支持PKCS8和PKCS1,支持两种字符集选择(UTF-8和GBK),D7~XE10可用

    C# SHA1withRsa的各种操作

    SHA1withRSA是一种常用的数字签名算法,结合了SHA1哈希函数和RSA公钥加密算法,用于验证数据的完整性和来源。本篇文章将深入探讨C#中如何使用SHA1withRSA进行加密、解密、签名和验证签名的操作。 首先,我们需要...

    三种哈希算法的函数: sha256 md5 sha1

    在这个主题中,我们主要关注三种哈希算法:SHA256、MD5和SHA1。这些算法都是将任意长度的数据转换为固定长度的摘要,具有单向性和抗碰撞性。 1. **MD5(Message-Digest Algorithm 5)** - **简介**:MD5由Ronald ...

    linux C实现MD5withRSA签名

    需要注意的是,尽管MD5在历史上曾被广泛使用,但由于其安全性已受到质疑(存在碰撞攻击的可能),现在更多的推荐使用SHA-256或其他更安全的哈希函数。然而,由于历史遗留问题或特定场景的需求,MD5withRSA的使用仍然...

    win32api 实现 RSA加解密/SHA1WithRSA/.../PEM,CER,P12解析/-易语言

    [hmac-]md2/md4/md5/sha1/sha256/sha384/sha512 AES128/AES192/AES256/DES/3DES/RC4 KeyFactory 类则尽量还原了 CryptoJS 3.1.2 对 key 和 IV 的自动填充,AES 除外,AES 的密钥补齐大概是 CryptoJS 的 BUG。

    C++使用Openssl进行RSA加密解密及签名验签功能(SHA256)

    本文将深入探讨如何使用OpenSSL库在C++中实现RSA加密、解密以及签名和验签功能,特别关注SHA256WithRSA这一安全强度更高的签名方法。 首先,RSA的核心原理是基于大整数因子分解的困难性。它包含一对密钥,即公钥和...

    delphi XE6 RSA加密解密签名 MD5WithRSA签名 Java通用

    MD5WithRSA签名是一种结合了MD5哈希函数和RSA加密的签名方法。它先对原始数据进行MD5哈希,然后用私钥对哈希值进行加密,得到的签名可以用公钥验证。在Delphi中,可以使用Indy库中的TIdHashMD5和TRsa对象完成这一...

    浅谈C#中Md5和Sha1两种加密方式

    在C#编程中,MD5(Message-Digest Algorithm 5)和SHA1(Secure Hash Algorithm 1)是两种常见的散列函数,它们被广泛用于数据校验、密码存储以及文件完整性检查等方面。这两种算法虽然都能将任意长度的数据转化为...

    Java中常用的加密算法MD5,SHA,RSA

    Java 中常用的加密算法 MD5,SHA,RSA Java 中常用的加密算法有多种,包括 MD5、SHA 和 RSA 等,这些算法在不同的应用场景中发挥着重要作用。下面将对这些算法进行详细的介绍和分析。 一、MD5 加密算法 MD5...

    Delphi RSA 加密解密签名验签控件 RSA_Component(1.0.0.0).rar

    1. 苹果App签名, iOS App 签名的原理; 2. 支付宝签名验证 ; 2. HTTPS 加密连接; 3. 程序直接用RSA+AES加密通信 ; 如:利用OpenSSL库对Socket传输进行安全加密(RSA+AES); 但是没有提供Delphi使用的RSA支持,...

    system_signature.keystore

    android_platform_key生成的签名文件system_signature.keystore

    SHA1算法的Delphi版,及其测试程序源码

    它由美国国家安全局(NSA)设计,于1995年发布,是MD5算法的后继者。SHA1算法可以将任意长度的输入(也称为预映射或消息)转化为一个160位(20字节)的数字摘要,这个摘要具有高度的唯一性和不可逆性。 在Delphi...

    WNSLP.Toolkits.RSA-master.zip

    本文将深入探讨在C#中实现Java语言的MD5withRSA、SHA256withRSA、SHA384withRSA以及SHA512withRSA加密与解密,以及签名与认证的相关知识点。这些算法通常用于保护数据的完整性,防止篡改,并确保身份的真实性。 ...

    MD5_RSA加密

    1. MD5加密前,确保数据已经按照规定格式进行预处理。 2. RSA加密时,要确保公钥和私钥的安全管理,避免私钥泄露。 3. 对于较大的数据,通常先用RSA加密MD5摘要而非全部数据,因为RSA直接加密大数据可能会超出其最大...

    RSA和RSA2签名算法区别.md

    首先,通过对需要签名的数据进行摘要处理(如使用MD5等哈希算法),得到一个固定长度的摘要结果;其次,利用签名者的私钥对该摘要结果进行加密,生成最终的签名。此签名将随数据一起传输,在接收方验证时,需先用...

    Hash計算器

    在给定的标题"Hash计算器"中,我们可以理解这是关于一个工具或软件,它能够执行不同的哈希算法,如MD5、SHA-256、RSA以及CRC32。 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它产生一个128位(16...

    易语言实现多种加密签名方法

    实现多种加密,签名方法,包括各种md5,sha,md4,加密包括ads,des,hmac等

    爬虫工程师必备-nodejs编写的密码工具箱分享

    是前端爬虫工程师日常工作的一个利器。...MD5、MD5-SHA1、MD5WITHRSAENCRYPTION MDC2、MDC2WITHRSA、SHA1、SHA224 、SHA256、SHA384、SHA 对称加密算法:AES、DES、RC4、WAKE等 非对称加密算法:RSA

    Qt利用OpenSSl实现RSA数字签名

    2. 计算待签名数据的哈希值,这里可以使用SHA256等:`EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();`,`EVP_DigestInit_ex(md_ctx, EVP_sha256(), NULL);`,`EVP_DigestUpdate(md_ctx, data, data_len);`,`unsigned char...

Global site tag (gtag.js) - Google Analytics