![](/img/trans.png)
[英]how to make c openssl generate the same signed text as JAVA SHA256withRSA/PSS Signature?
[英]Check if the file is correct using sha1withRsa via openssl functions
主要思想:某公司A创建file_data,然后使用SHA1获取file_data的哈希,并使用RSA私钥对该哈希进行加密并获取file_signature。 然后,公司A向我发送了file_data和file_signature以及证书。 我从证书获取公共密钥,然后使用公共密钥解密file_signature并获取hash_1。 然后我得到file_data并使用SHA1获得hash_2。 如果hash_1和hash_2相等,那么我可以信任file_data的内容,对吗?
实现方式:
d2i_X509_fp()
函数。 现在我有证书。 X509_extract_key
,现在我有了公钥。 SHA1()
或SHA1_Init, SHA1_Update, SHA1_Finish
吗? memcmp
比较它们? 另一个问题是file_signature是128字节的len,当我解密它时,我得到128字节的hash_1(Am I rigth),但是当我得到file_data hash_2的哈希时,它的长度只有20个字节,所以我如何比较它们,或者我误会了什么?
谢谢你的帮助! ps:抱歉我的英语;)。
如果获得128字节的file_signature,则可能不是ASN.1编码的。 128位正好是1024位密钥的密钥长度(在当今的低端,请查看keylength.com)。 如果使用RSA,则不会直接对哈希进行加密:首先将其包装在ASN.1结构中,然后将其填充,所有操作均根据PKCS#1 v1.5(Google it)。
通常,您不会将散列与RSA加密分开进行。 像openssl这样的库将包含在自动计算哈希值的情况下执行验证的功能(毫无疑问,这将是openssl_verify())。 这些功能还将为您进行比较。
请注意,您将需要建立对公共密钥的信任,否则攻击者可能只生成一个随机密钥对,并向您发送不同的公共密钥以及攻击者签名的数据。 通常,预先使用直接通信或使用PKI基础结构(证书链)来信任公用密钥。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.