yinggegit / DataConverter

DataConverter is a powerful data processing and algorithmic tool,Meet the common data processing needs of C, Java and python programmers in daily programming, and effectively improve work efficiency.Based on reliable algorithm suite, support common cryptography algorithms such as finance, network security and information security, especially support China's national security algorithms SM2, SM3 and SM4.The layout of the interface has been carefully adjusted to support more than ten themes and fonts, support a variety of resolutions, and have a good visual experience.DataConverter 是一款强大的数据处理和算法工具.满足C、Java ,Python程序员的编程中常见的数据处理需求,有效提升Coding效率。基于可靠算法套件,支持金融,网络安全,信息安全等常见密码学算法,特别支持中国国密算法SM2,SM3,SM4.精心调整过界面布局,支持多种主题和字体,支持多种分辨率显示,视觉体验佳。
37 stars 9 forks source link

RSA验证问题 #6

Open zby1997 opened 2 months ago

zby1997 commented 2 months ago

博主您好,我在验证RSA签名的时候一直出错,我的数据是这样的 原文: whMQOag0Gc2kVe+xEwHnQvXhCrOGu+Bg

签名值: eZLugxFci8qBdZDk2+KHRLhetWeIbgxOYtPjB/Nc0P6UMnLLC3UPEADf/7hA+4qZ69b2FuohOEFML2Yy7Kryfr5A2XOQrBiz7+5U/PWW/3K35LRZqh1WVZc75pAnbrK14STUxwGSUCTZfLqC5U9Y1F56Y3BPHs5cWvDkQEZlFTc=

证书:MIIE2TCCA8GgAwIBAgIKLBAAAAAAAAABDTANBgkqhkiG9w0BAQsFADBIMQswCQYDVQQGEwJDTjENMAsGA1UECgwEQkpDQTEUMBIGA1UECwwLQmVpSmluZyBHQ0ExFDASBgNVBAMMC0JlaUppbmcgR0NBMB4XDTIwMDUyNzE2MDAwMFoXDTIwMDgyODE1NTk1OVowPTELMAkGA1UEBhMCQ04xFTATBgNVBAMMDGNlc2hpeW9uZ2h1MTEXMBUGCSqGSIb3DQEJARYIMUBxcS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN5yoKpDJiF8xdoDk/EE3rXp556LqQWWgB+4UwI2DbXVTbvSTY8iSn+D+voPsr7u5pIf4wTkBvD1y5Ri344/mPNiUU6n+m5iUBUHNKn/bJAZto4WIRvelURz+7VMPTNHTqDlBdwxQCepfak/Z+/Ls59GkzmzLVYicvWIzfXppAvHAgMBAAGjggJSMIICTjAfBgNVHSMEGDAWgBTg97BWGYalvVhTBfViJmNYxDjmPjAdBgNVHQ4EFgQU4APlwB+6GPDdbBSPRPS9rjhm48cwCwYDVR0PBAQDAgbAMIGoBgNVHR8EgaAwgZ0wYqBgoF6kXDBaMQswCQYDVQQGEwJDTjENMAsGA1UECgwEQkpDQTEUMBIGA1UECwwLQmVpSmluZyBHQ0ExFDASBgNVBAMMC0JlaUppbmcgR0NBMRAwDgYDVQQDEwdjYTFjcmwxMDegNaAzhjFodHRwOi8vMTExLjIwNy4xNzcuMTg5OjgwMDMvY3JsL2JqZ2NhL2NhMWNybDEuY3JsMAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgD/MB0GBSpWCwcBBBRTRjEyMDEwMTE5OTAwNTI4MDAxNDAdBgUqVgsHCAQUU0YxMjAxMDExOTkwMDUyODAwMTQwIAYIYIZIAYb4RAIEFFNGMTIwMTAxMTk5MDA1MjgwMDE0MBsGCCpWhkgBgTABBA85OTgwMDAxMDAxMDgzOTEwJQYKKoEchu8yAgEEAQQXMkJAU0YxMjAxMDExOTkwMDUyODAwMTQwKgYLYIZIAWUDAgEwCQoEG2h0dHA6Ly9iamNhLm9yZy5jbi9iamNhLmNydDAPBgUqVhUBAQQGMTAwMDg5MEAGA1UdIAQ5MDcwNQYJKoEchu8yAgIBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuYmpjYS5vcmcuY24vY3BzMBMGCiqBHIbvMgIBAR4EBQwDODg5MA0GCSqGSIb3DQEBCwUAA4IBAQBPZTlrt7qL6YeDj4S/3gMRa939IxzLSyxQ8n2Iiyx5I80YLS0nIM/dz+uV+ccfQk8MvI+kD7vmT2/lC/XKepgy8e0kCt3NDcmp8gIrUL2pUImYE0bcjNVPvGgSLflxXnISio+hU3BzO0IV2879mG54jcwZHovwDZdwo+qW7Vj/CyWCCWRhRnpi2dmFa2kparLHjqQtK4SBpnaMnQsAlw4Nh8cM23xAbDPLC05YGfOVzZxJyRcJuQD1CvKgkyMwJzbWFJH28AtF3OBEwAjYw2gmWoT6HiiZGMBlWrKJ7d3HNHUPjU71ltxeTxxHRAjJtxxIG30gqBqL/2iTSfhHsKUF

我是对原文转换16进制后进行sha1,对签名值base64解码,公钥从证书中提取,在RSA的verify模块中并未验证通过,同事用之前老版本,在RSA的enc模块中选择public key加密就能通过,不知道这是什么问题,同样的数据我在其他验签工具中可以验过

yinggegit commented 2 months ago

你好:     请先确认你需要解密的数据和密钥的大小端是否预期,工具默认的密钥和数据是是大段格数,即高位在前(可以用工具带的大小端转换下格式)。

    举例,随机产生一组公私钥,     然后对Hex 数据 001122334455 进行签名

    工具计算签名的过程如下:     首先计算 001122334455 的SHA256 数据  48F4634D1002F9F3C7570CB43E00DD869B22C79538E9B4ADC7E402DE1189CFE1     然后对 48F4634D1002F9F3C7570CB43E00DD869B22C79538E9B4ADC7E402DE1189CFE1进行 PKCSV1.5 填充得到     0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003031300D06096086480165030402010500042048F4634D1002F9F3C7570CB43E00DD869B22C79538E9B4ADC7E402DE1189CFE1      然后用私钥进行加密:   得到签名数据:  B344F7C502B67E54AE52E19490B8754848AFB044CC6D37BB982CD22831DCA1654C6E2592C5412F3B8424D0D684C191B96FA2B6E0D3D8CA1A998A74151D056ED331526F7DB0004F8C39FFA4FFD4756EC47B38DBC8F6CFCECEFEAA8A2229011E7A4549DC87B195BC10ED2C5C843852974341FF2ADEBAAC10DE78DFB128B24E81927421D5A5F8DBA1DF4C90555A2044B103E4DC4CCC55ED23A594D3B08229FD2BC32B80C0A04B721D36D6489971908FC59D42EA6ED2482D89F91FE7F89F372E37C9489FD863B664BB394F6B402D866361F68186B670FB124AB31702521860FC164BA2BF3A366E39B1F127D55CEF3AA347CF9F1A4A7F29BD85FB5A0177217A16B30C

       如图所示   

验证的过程是上面的反运算: 用公钥解密得到填充数据,然后把签名HASH值得到,对签名数据算HASH,如果两者对应则验签通过。

我们用公钥解密:

那么我们可以解密得到 001122334455 的SHA256 数据  48F4634D1002F9F3C7570CB43E00DD869B22C79538E9B4ADC7E402DE1189CFE1

验签的数据:

总之以上签名,解密要相互对得上,才可以验签成功, 希望对你有帮助。

------------------ 原始邮件 ------------------ 发件人: "yinggegit/DataConverter" @.>; 发送时间: 2024年7月4日(星期四) 中午11:10 @.>; @.***>; 主题: [yinggegit/DataConverter] RSA验证问题 (Issue #6)

博主您好,我在验证RSA签名的时候一直出错

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.

Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this @.***>

zby1997 commented 2 months ago

很感谢博主的回答,我后来又试了以下,发现出现这个问题和大小端没有关系,因为当我在其他工具用公钥对签名值解密后发现得到的杂凑值是原文做了sha1并填充的数据。随后我让工具自己生成公私钥,对相同数据签名,然后替换公钥、签名值和杂凑值,发现验证成功了,但是当我再重启工具,用相同的公钥、签名值和杂凑值验证,发现抱错,初步推测可能是工具实现的逻辑问题 1 2 3 4 图一到图三是生成公私钥对再替换后成功的截图,图4是重新启动后对相同数据验签失败的截图

yinggegit commented 2 months ago

感谢你反馈,应该是重启之后,软件恢复默认的SHA算法是SHA256。 工具应该根据SHA值的长度自动判断哈希的算法,我下一个版本改进。 比如重启之后,把SHA256 改为SHA1 就能验证正确了。

------------------ 原始邮件 ------------------ 发件人: "yinggegit/DataConverter" @.>; 发送时间: 2024年7月5日(星期五) 下午5:20 @.>; @.**@.>; 主题: Re: [yinggegit/DataConverter] RSA验证问题 (Issue #6)

很感谢博主的回答,我后来又试了以下,发现出现这个问题和大小端没有关系,因为当我在其他工具用公钥对签名值解密后发现得到的杂凑值是原文做了sha1并填充的数据。随后我让工具自己生成公私钥,对相同数据签名,然后替换公钥、签名值和杂凑值,发现验证成功了,但是当我再重启工具,用相同的公钥、签名值和杂凑值验证,发现抱错,初步推测可能是工具实现的逻辑问题 1.png (view on web) 2.png (view on web) 3.png (view on web) 4.png (view on web) 图一到图三是生成公私钥对再替换后成功的截图,图4是重新启动后对相同数据验签失败的截图

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

zby1997 commented 2 months ago

然而正常的逻辑不应该是解密后得到的是sha1的杂凑和一些填充,此时对比输入的杂凑值(输入的杂凑值是什么算法不由默认的设置版本决定)是否和去掉填充的杂凑值相同