ECC椭圆曲线
一、概念
????橢圓曲線密碼學,一種建立公開密鑰加密的算法,基于橢圓曲線數學。主要優勢是在某些情況下他比其他的方法使用更小的密鑰,提供相當的或更高等級的安全。橢圓曲線密碼學的許多形式有稍微的不同,所有的都依賴與被廣泛承認的解決橢圓橢圓曲線離散對數問題的困難性上。與傳統的基于大質數因子分解困難性的加密方法不用,ECC通過橢圓曲線方程式的性質產生密鑰。
????ECC 164位的密鑰產生的一個安全級相當于RSA 1024位密鑰提供的保密強度,而且計算量較小,處理速度更快,,存儲空間和傳輸帶寬占用較少。目前,我國居民二代身份證正在使用256位的橢圓曲線密碼。
數學公式
橢圓曲線博客
二、代碼實現
package mainimport ("crypto/ecdsa""crypto/elliptic""crypto/rand""crypto/x509""encoding/pem""fmt""os" )/* 選擇一個橢圓曲線(在elliptic包) 使用ecdsa包,創建私鑰 使用x509進行編碼 pem.Encode */ const EccPrivateKeyFile = "./EccPrivateKey.pem" const EccPublicKeyFile = "./EccPublicKey.pem"func generateEccKeypair() {//選擇一個橢圓曲線(在elliptic包)//type Curve//func P224() Curve//func P256() Curve//func P384() Curve//func P521() Curvecurve := elliptic.P256()//使用ecdsa包,創建私鑰//GenerateKey函數生成密鑰對//func GenerateKey(c elliptic.Curve, rand io.Reader) (priv *PrivateKey, err error)privateKey , err := ecdsa.GenerateKey(curve,rand.Reader)checheErr("generate key failed",err)//使用x509進行編碼//MarshalECPrivateKey將ecdsa私鑰序列化為ASN.1 DER編碼。//func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error)derText1 , err := x509.MarshalECPrivateKey(privateKey)checheErr("MarshalECPrivateKey",err)//寫入pem.Block中block1 := pem.Block{Type: "ECC PRIVATE KEY",Headers: nil,Bytes: derText1,}//pem.EncodefileHander1 ,err := os.Create(EccPrivateKeyFile)checheErr("os.Create fileHander failed",err)defer fileHander1.Close()err = pem.Encode(fileHander1,&block1)checheErr("pem.Encode failed",err)fmt.Println("==========================================")//獲取公鑰publicKey := privateKey.PublicKeyderText2 , err := x509.MarshalPKIXPublicKey(&publicKey)checheErr("x509.MarshalPKIXPublicKey failed",err)//寫入pem.Block中block2 := pem.Block{Type: "ECC PRIVATE KEY",Headers: nil,Bytes: derText2,}//pem.EncodefileHander2 ,err := os.Create(EccPublicKeyFile)checheErr("os.Create fileHander failed",err)defer fileHander2.Close()err = pem.Encode(fileHander2,&block2)checheErr("pem.Encode failed",err)}func main(){generateEccKeypair() }func checheErr(message string, err error) {if err != nil {fmt.Println(message + "err:",err)} }總結
- 上一篇: 上海java软件工程师的工资待遇
- 下一篇: 使用最小二乘法拟合由分段函数构成的广义贝