【发布时间】:2011-04-12 07:16:41
【问题描述】:
嗨,我有 file_data(xml 格式)和 file_signature(ASN1 DER),还有证书(X509 ASN1 DER)。我想检查 file_data 是否正确,但我有一些问题。我在做什么:
主要思想:某公司A创建file_data,然后使用SHA1获取file_data的hash,并使用RSA私钥加密此hash并获取file_signature。然后 A 公司向我发送 file_data 和 file_signature 和证书。我从证书获取文件签名中获取公钥并使用公钥解密文件签名并获取 hash_1。然后我得到 file_data 并使用 SHA1 得到 hash_2。如果 hash_1 和 hash_2 相等,我可以相信 file_data 的内容,对吗?
实施:
- 加载证书:
d2i_X509_fp()函数。现在我有证书了。 - 获取证书的公钥:
X509_extract_key,现在我有公钥了。 - 现在我想加载 file_signature 以使用公钥对其进行解密,但 file_signature 具有 ASN1 DER 格式我如何加载它,我应该使用 OpenSSl 中的什么函数?
- 假设我读取了 file_signature,现在我必须使用我的公钥对其进行解密,是否有任何 API 可用于此目的?
- 假设我解密 file_signature 并获得 hash_1。
- 现在我必须加载 file_data 并使用 SHA1 函数 hash_2 获取它的哈希值,我必须使用什么函数?
SHA1(),还是SHA1_Init, SHA1_Update, SHA1_Finish? - 假设我得到 hash_1 和 hash_2,我必须如何比较它们,使用
memcmp? - 假设我比较它们,如果它们相等,我可以使用 file_data。
另一个问题是 file_signature 是 128 字节 len,当我解密它时,我得到 128 字节 hash_1(Am I rigth),但是当我得到 file_data hash_2 的哈希时,它的长度只有 20 字节,所以我如何比较它们,还是我误会了什么?
感谢您的帮助! p.s.对不起我的英语不好;)。
【问题讨论】:
-
ASN1 DER 不是签名格式。 ASN.1 是用于描述数据结构的标准。 DER (Distinguished Encoding Rules) 是 ASN.1 结构编码的规范。您是否有关于签名格式(原始 RSA/PKCS 1、CMS...)的任何其他信息?
标签: c cryptography openssl x509