Pretty close, you need to encode in base64 (and divide with endlines,
add header, etc.)
https://play.golang.org/p/zvxfiLwp3h
On 05/07/16 11:22, bentonrobe...@gmail.com wrote:
Hello.
I am trying to write code that takes the encrypted private half of an
SSH key plus its password, and output the decrypted secret key. I
think I am using crypto/x509 and encoding/pem correctly to decrypt the
data – if I change the password, the expected error results – but I
can't seem to get at the same text that would be printed by openssl
rsa -in ./test.key. Here's that almost-working example, with an
embedded key that's encrypted with the word "testpass":
|
packagemain
import(
"crypto/x509"
"encoding/pem"
"fmt"
"os"
)
func main(){
PASSWORD :=[]byte(`testpass`)
CRYPTO_TEXT :=[]byte(`-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,D8CAD500D219AD23A4A3AA911A7EB230
+H1lGhWVpWsMH2BtKcfokvXGdbMCw9KhObnlq7gx0HwkT2CjWkV9gsg1ybJhxYiF
1u3TxfPotrXcbRmTXOM42HmnheM/Ti7taQh2Vxf2rIkcaEm2siMT6O16kMt6CAUp
iVOiuG3XV5BXODQDHGkVor+WJh1ReT6ZCsSzGLk8/3OaBryoxJkSE0ydY1i3HU4E
8RQwKYas1rSfURfUDvCL8wUYkJfd4qzVvgkrrSTicZzU2RTkSxGO6wHmxOoX5cEs
DPEQkUjqmsf35c+CYTWrojB8eKqVavuD64+RBssJnTdfc9jlZEi+o+1LJDyJrJd+
73D/cyoHHj0Wr01gPrPpQOD6x1HAedp1beqT3N3jNt5z3r9tEdVNYNCnSnb9WnlI
5wkS4XsmBz7BD0rAku5qMgel3BWYbZTee+5BQ3Ft60nj+iKngJe1/tupMrKD31Db
o+/cmWaeneWi/xxB7z/lmo++u25ECCxcRqdTbjhdAAKb2Yjwb3K8phwyRvcMF4+Z
/HH/RTJTLb8DvF0sfjgkZMcn8dF2HQxy8cMf1jVF4+UlaPHcKsAXEBjooJkzuVrC
ZMGlScWcMvh4VfB0wL7t5jnf3FEfaR9KR3rzAhm+XLDF0Zzol8tOk7CKr0covL1S
TBpbQ8u1XGXtEt/NVkwB4Q7QOCeAxGSb0HMciKEN7uclA6AwZ+wBqzfMxqHzOL6z
9ecUlq/pypAh56gLJyWOivQBSrHkUdMBr6/VNtLHB1NZOFq2fIPBaWuhN/69Lhj4
rzq5p0YlE+ivIlg1SkH3BbX/59acKMfXNjfyuZG4If4EUCPzgcsQb8QWNAYlOfr1
g/35tc3wpEenrGqtQE9rwPeD+ArhecUZ9iMtjohL+si7bgxGBHyp+a1eN8irN0rh
rToOYTq+9xnpI4sQp+D0oZZ+B7EVTLL7EYGNfAvroDPl/sIuHPtc4Cns7MgRH4Z9
F7Lvd0lSEbMOL+uVdkhR4/AjIiv9aLsv4O/0NTsqDwG0evjFt5G1hLDelMaqaGeL
jz3eOv8IvL4ueqp1KTOD7ofT62GOj4tR8z4RE2uhHl5ummrI+7G3/2iAQeuWRlTQ
DafjhU2NSN+TIGzaCn3Kghmj5Wwl3tXIqf8JRDenBIl2RxsczyDxn0UtKn61DOXB
dQLvSn0YRU+q0F7GJPp/FjWiekPhj3UkWyEFEX+Py5+QHx2CxOvsh0Nd1iKLjn/w
wEpIHuny/rPuz7e+W3y883IQhEBToqFa8QwX3V60kfwpfffYoF6M/dFe3gOkOt5o
KQGuZFtfoxUdie4TFZqhqF2fCYBNPmySKJy+aH8qom9ITcvHaUGvGZKBuA9C0qJy
rON/oWs8Fi5Cl+Vi8Eu0Qi2v3lepsUmeiA5wc6S6voJsE/RL1OPiw4wpKZqhpwdz
kqQe1YAlfpw2uLs67ugeNZUraeJYRgJihL+M0X1z99eoaMD0xU6mwhtI5b1V6dkD
lEbCbnAznehhU59zM4ZNc65ZQHpqdrmjYd6CiuZ5sMvI9c8UKvFWj2Rn8MY3kV+b
2wSPDF/dbJ1M6oLTvGshXviRRMgrRFTc2GMy5fbSb8Zqex57SQ0QXqQJ9FQZCIMJ
-----END RSA PRIVATE KEY-----`)
pemBlock,_ :=pem.Decode(CRYPTO_TEXT)
ifpemBlock !=nil{
ifx509.IsEncryptedPEMBlock(pemBlock){
fmt.Printf("Decrypting private PEM data...\n")
clearText,err :=x509.DecryptPEMBlock(pemBlock,PASSWORD)
iferr ==nil{
fmt.Printf("clearText (len %d): %s\n",len(clearText),clearText)
}else{
fmt.Printf("Error decrypting PEM-encoded secret: %s\n",err)
os.Exit(2)
}
pkcsData,err :=x509.ParsePKCS1PrivateKey(clearText)
iferr !=nil{
fmt.Printf("ERROR parsing PKCS data: %s!",err)
os.Exit(3)
}
fmt.Printf("PKCS data: %v\n",pkcsData)
}
}
os.Exit(0)
}
|
Thanks in advance to anyone who can help me produce the plain text of
the decrypted private key, as if decrypted with command-line openssl.
Sincerely,
- benton
--
You received this message because you are subscribed to the Google
Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to golang-nuts+unsubscr...@googlegroups.com
<mailto:golang-nuts+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.