提供程序具有此示例 JAVA 代码,用于使用公钥解密 RSA。
public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey)
throws Exception {
byte[] keyBytes = Base64.decodeBase64(publicKey);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key publicK = keyFactory.generatePublic(x509KeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, publicK);
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
while (inputLen - offSet > 0) {
if (inputLen - offSet >(2048/8)) {
cache = cipher.doFinal(encryptedData, offSet,(2048/8));
} else {
cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i *(2048/8);
}
byte[] decryptedData = out.toByteArray();
out.close();
return decryptedData;
}
我试图在Go中写下等价物,但没有任何运气。
base64DecodeBytesKey, err := base64.StdEncoding.DecodeString(os.Getenv("PUBKEY"))
if err != nil {
Log(logRef, " error reading pubkey", err)
}
pubKey, err := x509.ParsePKCS1PrivateKey(base64DecodeBytesKey)
c := new(big.Int)
m := new(big.Int)
m.SetBytes(data)
e := big.NewInt(int64(pubKey.E))
c.Exp(m, e, pubKey.N)
out := c.Bytes()
skip := 0
以上是第一次尝试,但失败了。 确实需要私钥,提供商坚持认为这不是必需的。rsa.DecryptPKCS1v15
encryptedBlockBytes, err := rsa.DecryptPKCS1v15(
rand.Reader,
NO_PRIVATE_KEY_PROVIDED,
payloadBytes[start:finish])
有没有办法使用Go加密库从RSA验证PSS中获取解密的有效负载?
收到一只叮咚
相关分类