问题
How do I do the equivalent of the following C++ code in go?
RSA *key = PEM_read_RSAPrivateKey(f, NULL, NULL, NULL);
std::vector<CK_BYTE> out(128);
RSA_private_encrypt(in.size(), &in[0], &out[0], key, RSA_PKCS1_PADDING)
I've looked at the Go rsa package. It looks like EncryptPKCS1v15() may be the equivalent of RSA_private_encrypt(). But I don't see how to create a PrivateKey object other than with GenerateKey(), which (one can confirm by looking at the source) generates one using random prime numbers.
Do I need to figure out how to decode a PEM file so pull out the PrivateKey fields' values?
Update: The equivalent to the above C++ code in Python is:
from M2Crypto import RSA
rsa_private_key = RSA.load_key('privkey.pem')
encrypted = rsa_private_key.private_encrypt(digest, RSA.pkcs1_padding)
Is there an existing equivalent in Go?
回答1:
The equivalent function appears to be SignPKCS1v15. The function ParsePKCS1PrivateKey in the crypto/x509 package appears to be the closest to what you need to read in your existing private key, but I'm not sure the PEM format is exactly compatible, which it must be for this to work.
回答2:
I think you may be looking for crypto/tls, not crypto/rsa.
I'm not 100% sure what you're trying to do here, but the tls package does have some functionality for reading PEM files.
来源:https://stackoverflow.com/questions/3107143/how-do-i-encrypt-with-an-rsa-private-key-read-from-a-pem-file-using-the-go-progr