验证网址secKey

2020-08-19 17:06发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要一些帮助来实现用于归档链接的小型接口(http接口)。 我想使用seckey参数和sap系统提供的证书来验证url。

我正在使用bouncycastle作为安全提供程序,但出现错误。 我得到的错误是"错误解码签名字节"。 我不确定在开始验证之前是否必须对secKey做些事情。

有人尝试过吗? 您如何验证网址?

欢迎使用代码和小费!!!

请帮助。

我的代码:

secKey =包含sec-key参数的urldecoded值的字节数组

MessageDigest md5 = MessageDigest.getInstance(" MD5");

byte [] hash = md5.digest(buffer);

java.security.Signature dsa2 = java.security.Signature.getInstance(" SHA1withDSA"," BC");

dsa2.initVerify(certificate.getPublicKey());

dsa2.update(hash);

System.out.println(" Verification:" + dsa2.verify(secKey));

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要一些帮助来实现用于归档链接的小型接口(http接口)。 我想使用seckey参数和sap系统提供的证书来验证url。

我正在使用bouncycastle作为安全提供程序,但出现错误。 我得到的错误是"错误解码签名字节"。 我不确定在开始验证之前是否必须对secKey做些事情。

有人尝试过吗? 您如何验证网址?

欢迎使用代码和小费!!!

请帮助。

我的代码:

secKey =包含sec-key参数的urldecoded值的字节数组

MessageDigest md5 = MessageDigest.getInstance(" MD5");

byte [] hash = md5.digest(buffer);

java.security.Signature dsa2 = java.security.Signature.getInstance(" SHA1withDSA"," BC");

dsa2.initVerify(certificate.getPublicKey());

dsa2.update(hash);

System.out.println(" Verification:" + dsa2.verify(secKey));

付费偷看设置
发送
9条回答
me_for_i
1楼-- · 2020-08-19 17:07

线

CMSSignedData csd =新的CMSSignedData(新的CMSProcessableByteArray(),签名);

必须

CMSSignedData csd =新的CMSSignedData(新的CMSProcessableByteArray(message2Sign),签名);

骆驼绵羊
2楼-- · 2020-08-19 17:20

嗨,埃内斯托,

我使用的代码与您提供的用于验证secKey的代码相似,并且在执行signer.verify()方法时收到如下错误:

java.security.NoSuchAlgorithmException:没有这样的算法:SHA

提供商BC的

1with1.3.14.3.2.27

我正在使用Bouncy Castle 1.32运行JDK 1.4.2。

你们中的任何一个都有运气吗?

谢谢

Brian

灬番茄
3楼-- · 2020-08-19 17:30

你好

我也在实现http接口。

这是充气城堡的代码:

 byte [] publicKey = ...;
 字节[]签名= ...; //secKey参数的值
 字节[] message2Sign = ...; //用于计算签名的字符串字节。 这是一些参数的总结。 而且它必须像URL一样编码(规范的第11页)。

 CertificateFactory cf = CertificateFactory.getInstance(" X.509"," BC");
 X509Certificate证书=(X509Certificate)cf.generateCertificate(new ByteArrayInputStream(publicKey));

 CMSSignedData csd =新的CMSSignedData(新的CMSProcessableByteArray(),签名);

 SignerInformationStore signerInfos = csd.getSignerInfos();
 集合签署者= signerInfos.getSigners();

 布尔值验证= true;
 Signer信息签名者;
 for(迭代器sit = signers.iterator();已验证的&& sit.hasNext();){
     签名者=(SignerInformation)sit.next();
     已验证=已验证&& signer.verify(证书," BC");
 }
 返回验证;  

此致

Ernesto。

SKY徐
4楼-- · 2020-08-19 17:15

Torsten,

在Bouncy Castle支持列表中,我能够找到答案。 显然,"没有这样的算法"错误是由BC最新版本中的错误引起的。 有人给我指了一个新的Beta版本133b06,它非常有效。

您可以从以下位置下载它:

http://www.bouncycastle.org/betas

祝你好运!

Brian

粗暴的香蕉
5楼-- · 2020-08-19 17:21

嗨,

感谢您的答复,并感谢代码示例! 我确实得到了和Brian一样的错误。 我使用相同版本的BC和JRE/JDK。

我会继续努力。

cu

痛苦

绿领巾童鞋
6楼-- · 2020-08-19 17:30

最后。

我解决了这个问题。 您必须对secKey使用urldecode,但是在创建message2sign字节时,必须不要使用urldecode,您需要从rawurl创建message2sign字符串。

一周热门 更多>