OpenSSL解密
OpenSSL decryption
我有加密字符串和非对称 RSA 密钥。该字符串由 PHP 及其函数 openssl_public_encrypt
使用密钥的 public 部分和 PKCS#1 v1.5 填充进行加密。我想用 Go 语言和密钥的私有部分解密加密的字符串。
我知道如何解密 PHP:
<?php
$encrypted = file_get_contents('./encryptedString.txt');
$privKey = file_get_contents('./private.key');
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $privKey);
print_r($decrypted);
我知道如何解密 Bash:
#!/bin/bash
cat encryptedString.txt | base64 -d > encryptedString64.txt
openssl rsautl -decrypt -in ./encryptedString64.txt -inkey ./private.key
我想在GO lang中用同样的方法解密字符串。我已经尝试了 crypto/rsa
包中的一些功能:
func DecryptString(privKey *rsa.PrivateKey, encryptedString []byte) ([]byte, error) {
decryptedBytes, err := rsa.DecryptOAEP(sha256.New(), nil, privKey, encryptedString, nil)
if err != nil {
return nil, err
}
return decryptedBytes, nil
}
func GetPrivateKey() (*rsa.PrivateKey, error) {
pemString := `******************`
block, _ := pem.Decode([]byte(pemString))
parseResult, _ := x509.ParsePKCS8PrivateKey(block.Bytes)
key := parseResult.(*rsa.PrivateKey)
return key, nil
}
...但我仍然收到错误“crypto/rsa:解密错误”或空结果。我错过了什么?
谢谢大家的评论。我已经解决了,我在下面发布解决方案。
func main() {
privateKeyB, err := ioutil.ReadFile("private.key")
if err != nil {
log.Fatal("Failed to read private key - " + err.Error())
}
block, _ := pem.Decode(privateKeyB)
parseResult, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
log.Fatal("Failed to parse private key - " + err.Error())
}
privateKey := parseResult.(*rsa.PrivateKey)
encStringB, err := ioutil.ReadFile("encryptedString.txt")
if err != nil {
log.Fatal("Failed to read encrypted string - " + err.Error())
}
encString64, err := base64.StdEncoding.DecodeString(string(encStringB))
if err != nil {
log.Fatal("Failed to decode encrypted string to base64 - " + err.Error())
}
decryptedB, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, encString64)
if err != nil {
log.Fatal("Failed to decrypt string - " + err.Error())
}
fmt.Println(string(decryptedB))
}
我有加密字符串和非对称 RSA 密钥。该字符串由 PHP 及其函数 openssl_public_encrypt
使用密钥的 public 部分和 PKCS#1 v1.5 填充进行加密。我想用 Go 语言和密钥的私有部分解密加密的字符串。
我知道如何解密 PHP:
<?php
$encrypted = file_get_contents('./encryptedString.txt');
$privKey = file_get_contents('./private.key');
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $privKey);
print_r($decrypted);
我知道如何解密 Bash:
#!/bin/bash
cat encryptedString.txt | base64 -d > encryptedString64.txt
openssl rsautl -decrypt -in ./encryptedString64.txt -inkey ./private.key
我想在GO lang中用同样的方法解密字符串。我已经尝试了 crypto/rsa
包中的一些功能:
func DecryptString(privKey *rsa.PrivateKey, encryptedString []byte) ([]byte, error) {
decryptedBytes, err := rsa.DecryptOAEP(sha256.New(), nil, privKey, encryptedString, nil)
if err != nil {
return nil, err
}
return decryptedBytes, nil
}
func GetPrivateKey() (*rsa.PrivateKey, error) {
pemString := `******************`
block, _ := pem.Decode([]byte(pemString))
parseResult, _ := x509.ParsePKCS8PrivateKey(block.Bytes)
key := parseResult.(*rsa.PrivateKey)
return key, nil
}
...但我仍然收到错误“crypto/rsa:解密错误”或空结果。我错过了什么?
谢谢大家的评论。我已经解决了,我在下面发布解决方案。
func main() {
privateKeyB, err := ioutil.ReadFile("private.key")
if err != nil {
log.Fatal("Failed to read private key - " + err.Error())
}
block, _ := pem.Decode(privateKeyB)
parseResult, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
log.Fatal("Failed to parse private key - " + err.Error())
}
privateKey := parseResult.(*rsa.PrivateKey)
encStringB, err := ioutil.ReadFile("encryptedString.txt")
if err != nil {
log.Fatal("Failed to read encrypted string - " + err.Error())
}
encString64, err := base64.StdEncoding.DecodeString(string(encStringB))
if err != nil {
log.Fatal("Failed to decode encrypted string to base64 - " + err.Error())
}
decryptedB, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, encString64)
if err != nil {
log.Fatal("Failed to decrypt string - " + err.Error())
}
fmt.Println(string(decryptedB))
}