2017-09-08 45 views
0

我有一个DSA参数的PEM文件。换句话说,内容有页眉/页脚是这样的:如何从Bouncycastle中的PEM文件加载DSA参数?

-----BEGIN DSA PARAMETERS----- ....... -----END DSA PARAMETERS-----

我看到BouncyCastle的具有类DSAParametersDSAKeyGenerationParmaters。我怀疑这个PEM是这些参数的表示,但我无法弄清楚如何从PEM格式加载它。我认为DSA的签名是40字节,但是我得到的是46字节,我怀疑DSA参数是责任,我有这个旧的dsa1024。我正在尝试加载并用于生成密钥/生成签名......)

+0

您是否试过PEMReader? – Lothar

回答

1

至少通过1.57(我还没有安装1.58)BCpkix org.bouncycastle.openssl.PEMParser未实现DSA参数(尽管它做EC参数),所以这不是一件容易的事。 只是看看你的参数将是(多)更容易使用

openssl dsaparam -in file -noout -text 

但我保证你不会发现任何错误在你的参数。经典的DSA参数是1024位组和160位的子组,在20年内没有任何变化或改变,我从未见过任何实现出错。

DSA-1024/160签名占用超过40个八位字节的常见原因是因为按照惯例(虽然FIPS 186不要求),它被编码在ASN.1 DER中。如果你问一个关于这个问题,我可以指出您现有的QS用于ECDSA,其中有完全相同的问题:

https://crypto.stackexchange.com/questions/1795/how-can-i-convert-a-der-ecdsa-signature-to-ASN.1 https://crypto.stackexchange.com/questions/33095/shouldnt-a-signature-using-ecdsa-be-exactly-96-bytes-not-102-or-103
https://crypto.stackexchange.com/questions/37528/why-do-openssl-elliptic-curve-digital-signatures-differ-by-one-byte
https://crypto.stackexchange.com/questions/44988/length-of-ecdsa-signature

但既然你问了一个问题这不是关于你的实际问题,它是针对堆栈策略给你一个解决你的实际问题的方法。

FWIW如果生成一个DSA 密钥(对)中的OpenSSL使用的参数,所有4种PEM格式专用密钥(PKCS8清晰和加密的,“旧版”清晰和加密)和用于公钥通常的PEM格式(SPKI ),可由PEMParser读取,并且可以产生可以从中提取参数的关键对象。 (从技术上说,SPKI的规范允许在某些情况下省略DSA参数,但OpenSSL从不这样做。)

+0

你是对的。我很快就知道我真正的问题在于,bouncycastle给了我一个asn.1编码的签名,我期待着原始字节......所以我会探索这些问题的答案。 – Ben