C 通过openssl函数使用SHA1 WithRSA检查文件是否正确 嗨,我有文件数据(xml格式)和文件签名(ASN1 DER),还有证书(X509 ASN1 DER)。我想检查文件\u数据是否正确,但我有一些问题。我在做什么:
主要思想:某公司A创建文件\u数据,然后使用SHA1获取文件\u数据的散列,并使用RSA私钥加密该散列并获取文件\u签名。然后,A公司向我发送文件数据、文件签名和证书。我从证书获取公钥获取文件\签名,并使用公钥解密文件\签名并获取哈希值\ 1。然后我得到文件\ u数据并使用SHA1得到散列\ u 2。若hash_1和hash_2相等,我可以信任文件_数据的内容,对吗 实施:C 通过openssl函数使用SHA1 WithRSA检查文件是否正确 嗨,我有文件数据(xml格式)和文件签名(ASN1 DER),还有证书(X509 ASN1 DER)。我想检查文件\u数据是否正确,但我有一些问题。我在做什么:,c,cryptography,openssl,x509,C,Cryptography,Openssl,X509,主要思想:某公司A创建文件\u数据,然后使用SHA1获取文件\u数据的散列,并使用RSA私钥加密该散列并获取文件\u签名。然后,A公司向我发送文件数据、文件签名和证书。我从证书获取公钥获取文件\签名,并使用公钥解密文件\签名并获取哈希值\ 1。然后我得到文件\ u数据并使用SHA1得到散列\ u 2。若hash_1和hash_2相等,我可以信任文件_数据的内容,对吗 实施: 加载证书:d2i\u X509\u fp()函数。现在我有证书了 获取证书的公钥:X509\u extract\u key
d2i\u X509\u fp()
函数。现在我有证书了X509\u extract\u key
,现在我有了公钥SHA1_初始化、SHA1_更新、SHA1_完成
memcmp
p、 对不起,我的英语不好 如果您得到一个128字节的文件\u签名,那么它可能不是ASN.1编码的。128位正好是1024位密钥的密钥长度(现在,在低端,请查看keylegth.com)。如果使用RSA,则哈希不会直接加密:首先将其包装在ASN.1结构中,然后对其进行填充,所有这些都符合PKCS#1v1.5(Google it)的要求 通常,您不会将散列与RSA加密分开执行。像openssl这样的库将包含一些函数,用于执行自动计算哈希的验证(毫无疑问,这将是openssl_verify()。这些函数也将为您进行比较
请注意,您需要为公钥建立信任,否则攻击者可能只会生成一个随机密钥对,并将不同的公钥与攻击者签名的数据一起发送给您。通常,使用直接通信或使用PKI基础设施(证书链)信任公钥。ASN1 DER不是签名格式。ASN.1是用于描述数据结构的标准。DER(区分编码规则)是ASN.1结构编码的规范。你有关于签名格式(原始RSA/PKCS 1,CMS…)的其他信息吗?PS你的英语很好-使用大写字母“I”看起来更专业。