RSA 공용 키 파일 생성 코드 구현
17841 단어 매개변수 구성
package main
import (
"flag"
"crypto/rsa"
"crypto/rand"
"crypto/x509"
"encoding/pem"
"os"
"log"
)
func main() {
var bits int
flag.IntVar(&bits, "b", 1024, " , 1024")
flag.Parse()
if GenRsaKey(bits) != nil {
log.Fatalln(" !")
}
log.Println(" !")
}
func GenRsaKey(bits int) error {
//
privateKey, err := rsa.GenerateKey(rand.Reader, bits)
if err != nil {
return nil
}
derStream := x509.MarshalPKCS1PrivateKey(privateKey)
/* */
block := &pem.Block{
Type:"PRIVATE KEY",
Bytes:derStream,
}
fi, err := os.Create("private.pem")
if err != nil {
return err
}
err = pem.Encode(fi, block)
if err != nil {
return err
}
/* */
//
publicKey := &privateKey.PublicKey
derPkix, err := x509.MarshalPKIXPublicKey(publicKey)
if err != nil {
return err
}
/* */
block = &pem.Block{
Type:"PUBLIC KEY",
Bytes:derPkix,
}
fi, err = os.Create("public.pem")
if err != nil {
return err
}
err = pem.Encode(fi, block)
/* */
return err
}
package main
import (
"io/ioutil"
"log"
"github.com/syndtr/goleveldb/leveldb/errors"
"encoding/pem"
"crypto/x509"
"crypto/rsa"
"fmt"
)
//
var privateKey, publicKey []byte
func init() {
var err error
publicKey, err = ioutil.ReadFile("public.pem")
if err != nil {
log.Fatalln(err)
}
privateKey, err = ioutil.ReadFile("private.pem")
if err != nil {
log.Fatalln(err)
}
}
/**
* : RSA
* :public
* : RSA , error
*/
func GetPubKeyLen(pubKey []byte) (int, error) {
if pubKey == nil {
return 0, errors.New("input arguments error")
}
block, _ := pem.Decode(publicKey)
if block == nil {
return 0, errors.New("public rsaKey error")
}
pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return 0, err
}
pub := pubInterface.(*rsa.PublicKey)
return pub.N.BitLen(), nil
}
/*
RSA
PriKey
RSA , error
*/
func GetPriKeyLen(priKey []byte) (int, error) {
if priKey == nil {
return 0, errors.New("input arguments error")
}
block, _ := pem.Decode(priKey)
if block == nil {
return 0, errors.New("private rsaKey error")
}
priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return 0, err
}
return priv.N.BitLen(), nil
}
func main() {
// rsa
pubKeyLen, _ := GetPubKeyLen(publicKey)
fmt.Println(pubKeyLen)
// rsa
privateLen, _ := GetPriKeyLen(privateKey)
fmt.Println(privateLen)
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Struts2 web.xml(7)1.web.xml 2. 초기화 매개변수 지정하기 3. FilterDispatcher가 포함할 수 있는 초기화 매개 변수는 다음과 같다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.