我们使用Chilkat在PowerBuilder 9.0.3应用程序(以及PowerBuilder 12.6)中签名HTTP请求,但这就像Chilkat生成的签名不被Isabel的API接受(我们已经联系了Isabel,他们猜测签名中存在参数问题算法)。伊莎贝尔API(https://documentation.ibanity.com/http-signature)的留档说,我们必须使用带有以下参数的RSASSA-PSS签名算法。
因此,我们将chilkat Rsa组件设置为:
loo_Rsa = create oleobject
li_rc = loo_Rsa.ConnectToNewObject("Chilkat_9_5_0.Rsa")
loo_Rsa.DebugLogFilePath = "c:\tmp\rsa.log"
loo_Rsa.VerboseLogging=1
li_Success=loo_Rsa.ImportPrivateKeyObj(loo_Privkey)
if li_Success <> 1 then
ls_error = "Error importPrivateKey: "+loo_Rsa.LastErrorText
destroy loo_Rsa
goto ee_error
end if
// Use RSA-PSS by setting OaepPadding = 1
loo_Rsa.OaepPadding = 1
loo_Rsa.OaepHash = "SHA-256"
loo_Rsa.EncodingMode = "base64"
ls_Signature = loo_Rsa.SignStringENC(ls_signing_string,"SHA-256")
基于伊莎贝尔留档,你认为我们在Chilkat中正确设置了RSA参数吗?(我们也尝试了LittleEndian=0,但我们从Isabel API收到了相同的错误)。
以下是chilkat的日志供您参考:
在日志中,我看到Chilkat在签名字符串中的字符"="后面添加了字符3D,这正常吗?(在下面的日志中,我把字符3D用粗体表示)
ImportPrivateKeyObj:DllDate:2018年2月12日ChilkatVersion:9.5.0.72 UnlockPrefix:BEWANB。CB1042019架构:小端;32位语言:ActiveX VerboseLogging:1 toPrivKeyXml:toRsaPrivateKeyXml:TorsapkCS1 PrivateKeyder:(leaveContext)DecodeTasn:(leaveContext)(leaveContext)(leaveContext)importPrivateKey:loadAnyString:loadAnyXml:loadAnyXml:(leaveContext)(leaveContext)(leaveContext)(leaveContext)成功。(15毫秒)SignStringENC:DllDate:2018年2月12日ChilkatVersion:9.5.0.72 UnlockPrefix:BEWANB。CB1042019架构:小端;32位语言:ActiveX详细日志记录:1哈希算法:SHA-256字符集:windows-1252组件已使用购买的解锁代码成功解锁。inputBytesQP:(请求目标):获取/isabel connect/帐户报告?偏移量=3D0
\nhost:api。ibanity。com\n最大值:SHA-512=3dz4phnx7vu3xvchq1m2ab9yg5aulvxc=
G/SpIdNs6c5H0NE8XYXysP DGNKHfuwvY7kxvUdBeoGlODJ6 SfaPg=3D=3D\n(创建): 16=
15285438\n授权:承载访问\u令牌\u 1615285439散列符号:模数\u比特长度:2048散列字节:070D CF6B 85D6 ACE2 971F 20B3 29A0 439A FE36 9394 0D1C 10E7 513B 1447 F04D 39B2 padAndSignHash:keyType:专用散列:32填充:PSS散列:SHA-256 PSS\u编码:emLen:256自动选择的散列:32(leaveContext)(leaveContext 31ms)按顺序:LittleEndian(leaveContext 47ms)签名:Te3smfkvo26mi5pklsb8awajyylb3xku1dayps4glf1bugtu2dkjebvmkud aPuwo 51AyNarcD7vGtFp/ze3vjCB87lZ qrzdquepvunoba6toq467odiegpasj4b9sa6jsdxciegpkpizg8zojm87vkdxwf7nmi q5czgzgzgzgzglsswqlqlzg4wqlzzzzg4wqlzzzg9w9w9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9JuIl0VX49UFELU L/Xz9tOGnilA7UcKElWMXVzcEqo3KLcGUWQ==成功。(leaveContext 47ms)ImportPrivateKeyObj:DllDate:2018年2月12日ChilkatVersion:9.5.0.72 UnlockPrefix:BEWANB。CB1042019架构:小端;32位语言:ActiveX VerboseLogging:1 toPrivKeyXml:toRsaPrivateKeyXml:TorsapkCS1 PrivateKeyder:(leaveContext)DecodeTasn:(leaveContext)(leaveContext)(leaveContext)importPrivateKey:loadAnyString:loadAnyXml:loadAnyXml:(leaveContext)(leaveContext)(leaveContext)(leaveContext)成功。(leaveContext 31ms)SignStringENC:DllDate:2018年2月12日ChilkatVersion:9.5.0.72 UnlockPrefix:BEWANB。CB1042019架构:小端;32位语言:ActiveX详细日志记录:1哈希算法:SHA-256字符集:windows-1252组件已使用购买的解锁代码成功解锁。inputBytesQP:(请求目标):获取/isabel connect/帐户报告?偏移量=3D0
\nhost:api。ibanity。com\n最大值:SHA-512=3dz4phnx7vu3xvchq1m2ab9yg5aulvxc=
G/SpIdNs6c5H0NE8XYXysP DGNKHfuwvY7kxvUdBeoGlODJ6 SfaPg=3D=3D\n(创建): 16=
15287272\n授权:承载access_token_1615287272hashAndSign:modulus_bitlen: 2048 hashBytes: B22BC9AF 7041 43E4 1CFE 5898 C88C C9CE 95FC B536 AC75 1F21 996C 7E7A 7B19 80EF padAndSignHash: keyType: Private hashInsize: 32 padd: PSS hashAlg: SHA-256pss_encode: emLen: 256 autoSseltedSaltLen: 32(leaveContext)(leaveContext 31ms)字节顺序: LittleEndian(leaveContext 31ms)签名:0b/fLp4xbSaGqrH7HXsP8bRuhtr9xo7oPiY1 ryhVuR4vDCdCRFc2As6RX2SazS2T2MK4P966TX1rr5Qx2VnDYN0JL6ZnZAiR/P ILP19bJN9 f6Jv1nfmgSOUB/stxeLKNlibeMXaR6 heX/ccGY807r8MdEk3hGFwlkK611GjrHoNTH vge2ReQo8lKBaVP1QIHCvwXUVS39GdABHFLxTQ8La514YX8qruJp6i69lDfCvh4P9rOl5pebMwknyEjJ2rs0D40MUU8z hM5bm hSD
我们从Isabel API收到这个错误:
{“errors”:[{“code”:“invalidSignature”,“detail”:“无法验证HTTP签名。请参阅。”https://documentation.ibanity.com/http-signature“,”元“:{}]}
这里也是原始的签名字符串:
(请求-目标):获取 /isabel-connect/account-reports?偏移量=0
提前感谢您的帮助或建议。
问候。
男人
它现在工作正常,事实上基于Chlikat的例子,我改变了构建签名字符串的方式:我用一个字符串变量代替Chilkat StringBuilder来代替这个
// Step 4 - Build the signing string
ls_signing_string = "(request-target): "+ls_request_target+'\n'+&
"host: api.ibanity.com\n"+&
"digest: "+ls_digest+"\n"+&
"(created): "+ls_created+"\n"+&
"authorization: "+"Bearer "+is_token_isabel
...
ls_Signature = loo_Rsa.SignStringENC(ls_signing_string,"SHA-256")
我应该用这个
// Step 4 - Build the signing string
oleobject loo_SbSigningString
loo_SbSigningString = create oleobject
li_rc = loo_SbSigningString.ConnectToNewObject("Chilkat_9_5_0.StringBuilder")
loo_SbSigningString.Append("(request-target): ")
loo_SbSigningString.AppendLine(ls_Request_target,0)
loo_SbSigningString.Append("host: ")
loo_SbSigningString.AppendLine("api.ibanity.com",0)
loo_SbSigningString.Append("digest: ")
loo_SbSigningString.AppendLine(ls_digest,0)
loo_SbSigningString.Append("(created): ")
loo_SbSigningString.AppendLine(ls_Created,0)
loo_SbSigningString.Append("authorization: Bearer "+is_token_isabel)
..
ls_Signature = loo_Rsa.SignStringENC(loo_SbSigningString.GetAsString(),"sha-256")
我创建了一些示例,并将在这里创建更多:https://www.example-code.com/powerbuilder/ibanity.asp
我想分两步使用RSA/PSS签名制作SHA256,首先散列一条消息,然后使用RSASSA-PSS签名摘要 但我使用SHA256时RSA/PSS无法验证 我需要一些帮助,谢谢你的帮助。
我无法使用Crypt::RSA和Crypt::RSA::SS::PSS在Perl中验证PSS签名。 字符串“hello”是由设备签名的缓冲区。 “pubkey.pem”是设备的RSA公钥,用PEM_write_RSA_PUBKEY()从设备导出。 “hello.sig”包含由设备生成的二进制(原始)签名。(因为有填充,所以是128字节。) 我试图在Perl中使用crypt::rsa和crypt::
我正在处理C RPC客户端。我需要使用OpenSSL对mime数据进行签名,并将公钥和签名发送到服务器。Java将尝试使用公钥验证签名。 问题是,JAVA无法验证OpenSSL生成的签名,但可以验证JAVA生成的签名。你知道如何修复我的c客户端代码吗? C客户端代码: JAVA代码:
我们为RSA签名创建了调试公钥和私钥,并生成sha256哈希并保存在cp1.bin中。然后我们尝试验证签名,但总是失败。如果我们不使用pss填充,验证命令将通过。任何人都可以帮忙评论吗? 谢谢 C:\Project\pkc C:\Project\pkc
我已经把它归结为我能做的最简单的测试用例。我需要获取Python中生成的RSASSA-PSS签名,并在Go中验证它们。创建RSA密钥对并用其签名的Python代码如下: 那里引用的pycrypto_keys库可以在这里找到,用于参考函数和的具体实现。 我的Go测试由两个简单的文件组成,这些文件只依赖于核心包。首先是验证功能,verify.go: 第二,一个测试用例。密钥对和签名是使用顶部的Pyth
我有一个JavaScript客户端和一个Node服务器。JS.我试图在客户端签署一个简单的文本,并将签名与公钥一起发送到服务器,然后服务器可以验证公钥。 客户端的任何东西都可以!但我无法在服务器端验证签名。我认为您没有必要阅读客户机代码,但为了保证,我也会提供它。 客户代码: 服务器代码(为此我使用express): 服务器控制台日志: 注: 我认为在服务器中正确导入了公钥,因为当我在服务器中再次