ध्यान रखें कि आरएसए को ब्लॉक साइफर होने के लिए डिज़ाइन नहीं किया गया है। आम तौर पर आरएसए का प्रयोग एक सममित कुंजी को एन्क्रिप्ट करने के लिए किया जाता है जिसे तब डेटा एन्क्रिप्ट करने के लिए उपयोग किया जाता है।
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha1"
"crypto/x509"
"encoding/pem"
"flag"
"io/ioutil"
"log"
)
// Command-line flags
var (
keyFile = flag.String("key", "id_rsa", "Path to RSA private key")
inFile = flag.String("in", "in.txt", "Path to input file")
outFile = flag.String("out", "out.txt", "Path to output file")
label = flag.String("label", "", "Label to use (filename by default)")
decrypt = flag.Bool("decrypt", false, "Decrypt instead of encrypting")
)
func main() {
flag.Parse()
// Read the input file
in, err := ioutil.ReadFile(*inFile)
if err != nil {
log.Fatalf("input file: %s", err)
}
// Read the private key
pemData, err := ioutil.ReadFile(*keyFile)
if err != nil {
log.Fatalf("read key file: %s", err)
}
// Extract the PEM-encoded data block
block, _ := pem.Decode(pemData)
if block == nil {
log.Fatalf("bad key data: %s", "not PEM-encoded")
}
if got, want := block.Type, "RSA PRIVATE KEY"; got != want {
log.Fatalf("unknown key type %q, want %q", got, want)
}
// Decode the RSA private key
priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
log.Fatalf("bad private key: %s", err)
}
var out []byte
if *decrypt {
if *label == "" {
*label = *outFile
}
// Decrypt the data
out, err = rsa.DecryptOAEP(sha1.New(), rand.Reader, priv, in, []byte(*label))
if err != nil {
log.Fatalf("decrypt: %s", err)
}
} else {
if *label == "" {
*label = *inFile
}
out, err = rsa.EncryptOAEP(sha1.New(), rand.Reader, &priv.PublicKey, in, []byte(*label))
if err != nil {
log.Fatalf("encrypt: %s", err)
}
}
// Write data to output file
if err := ioutil.WriteFile(*outFile, out, 0600); err != nil {
log.Fatalf("write output: %s", err)
}
}
स्रोत
2013-02-18 20:00:50
मुझे लगता है कि आप (पैकेज परीक्षण [यहां] से कुछ प्रेरणा http मिल सकता है: इसे ध्यान में रखते, फिर भी, यहां एक कार्यक्रम जो डेटा है कि अपने आप में decrypted किया जा सकता है एन्क्रिप्ट करने के लिए कोई RSA निजी कुंजी का उपयोग कर सकते है : //golang.org/src/pkg/crypto/rsa/pkcs1v15_test.go) और/या [वहां] (http://golang.org/src/pkg/crypto/rsa/rsa_test.go)। – zzzz
यह भी देखें: http://unix.stackexchange.com/a/30074/22709 और https://web.archive.org/web/20120124211352/http://blog.oddbit.com/2011/05/converting- openssh-public-keys.html –