创建ECDSA DER编码签名

时间:2017-08-08 10:25:03

标签: java python encoding sign ecdsa

我正在尝试用Java创建一个ECDSA签名。当我在python中创建一个时,可以用Java验证它。但反之亦然给我一个BadSignatureException.Python正在使用ECDSA库而Java正在使用SpongyCastle。

签名的Python实现:

private_key = SigningKey.from_der(PRIVATE_KEY.decode('hex'))
private_key.sign(payload, hashfunc=hashlib.sha256, 
sigencode=sigencode_der).encode('hex'),

验证的实施

verifying_key = VerifyingKey.from_der(public_key.decode('hex'))
return vk.verify(signature.decode('hex'), payload, hashfunc=hashlib.sha256, sigdecode=sigdecode_der)

签名的Java实施

signature = Signature.getInstance("SHA256withECDSA", "SC");
signature.initSign(this.privateKey);
signature.update(input.getBytes("UTF-8"));
return new String(Hex.encode(signature.sign()));

验证的实施

signature = Signature.getInstance("SHA256withECDSA", "SC");
signature.initVerify(publicKey);
signature.update(input.getBytes("UTF-8"));
return signature.verify(Hex.decode(expectedSignature));

1 个答案:

答案 0 :(得分:0)

您可以尝试从python使用verify_digest()sign_digest()
例如,验证签名,

digest = SHA256.new() 
digest.update((message.encode('utf-8')))

verified = vk.verify_digest(bytes.fromhex(signature), digest.digest())