【发布时间】:2019-05-18 09:58:42
【问题描述】:
我在 Go 中创建一个签名,例如:
//I'm reading a file with -----BEGIN RSA PRIVATE KEY-----
privateKeyPem := strings.Replace(privateKeyString, `\n`, "\n", -1) //file has '/n' instead of break lines for dev purposes
block, _ := pem.Decode([]byte(privateKeyPem))
key, _ := x509.ParsePKCS1PrivateKey(block.Bytes)
hashedString := sha256.Sum256([]byte(stringTosign))
signature, err = rsa.SignPKCS1v15(rand.Reader, key, crypto2.SHA256, hashedString[:])
signatureString := base64.StdEncoding.EncodeToString(signature)
Java 程序接收变量 signatureString 并执行:
byte[] keyBytes = Files.readAllBytes(Paths.get("./golangSignerPubKey.der"));
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey publicKey = kf.generatePublic(spec);
Signature signature = Signature.getInstance("SHA256withRSA", "BC");
signature.initVerify(publicKey);
signature.update(stringUnsigned.getBytes());
boolean signatureIsValid = signature.verify(Base64.getDecoder().decode(signatureString.getBytes()));
但是 signatureIsValid 布尔值总是假的,我做错了什么吗?
【问题讨论】:
-
您是否已验证您可以在 Go 中对其进行解码?这将使查找错误更容易。
-
是的,我在创建签名后验证它是否有效(验证成功):clientCertEndorserSignToVerify, err := base64.StdEncoding.DecodeString(signatureSTring) errVerify := rsa。验证PKCS1v15(publicKey.(*rsa.PublicKey), crypto2.SHA256, hashedString, signatureString)
标签: java go digital-signature x509