我正在努力将以下java代码移植到python。我使用PyCrypto来读取publickKey,但是它失败了,出现了一个断言错误:
keyDER = b64decode(publicKeyBase64)
seq = asn1.DerSequence()
seq.decode(keyDER)
keyPub = RSA.construct( (seq[0], seq[1]) )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/Crypto/PublicKey/RSA.py", line 539, in construct
key = self._math.rsa_construct(*tup)
File "/usr/local/lib/python2.7/site-packages/Crypto/PublicKey/_slowmath.py", line 84, in rsa_construct
assert isinstance(n, long)
AssertionError
这些是变量:
^{pr2}$这是Java中验证签名的代码。在
import java.security.KeyFactory;
import java.security.Signature;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;
verifySignature(String message, String signature, String publicKeyBase64 )
byte[] keyBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(publicKeyBase64);
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory fact = KeyFactory.getInstance("RSA");
pubKey = (RSAPublicKey) fact.generatePublic(spec);
Signature genSignature = Signature.getInstance("SHA1withRSA");
genSignature.initVerify(pubKey);
genSignature.update(message.getBytes("UTF-8"));
boolean result = genSignature.verify(javax.xml.bind.DatatypeConverter.parseBase64Binary(signature));
PyCrypto中有一个特殊的类方法importKey来读取DER或PEM编码的RSA密钥。在
如果您的密钥不是一个简单的DER,而是一个完整的X.509证书,请参见this other StackOverflow answer。 一旦您拥有
^{pr2}$keyPub
,您就可以这样验证签名:相关问题 更多 >
编程相关推荐