新聞中心
怎么用 GO 實現(xiàn) RSA 的私鑰加密公鑰解密
packagemainimport("crypto/rand""crypto/rsa""crypto/x509""encoding/base64""encoding/pem""errors""flag""fmt")vardecryptedstringfuncinit(){flag.StringVar(decrypted,"d","","加密過的數(shù)據(jù)")flag.Parse()}funcmain(){vardata[]bytevarerrerrorifdecrypted!=""{data,err=base64.StdEncoding.DecodeString(decrypted)iferr!=nil{panic(err)}}else{data,err=RsaEncrypt([]byte("polaris@studygolang.com"))iferr!=nil{panic(err)}fmt.Println("rsaencryptbase64:"+base64.StdEncoding.EncodeToString(data))}origData,err:=RsaDecrypt(data)iferr!=nil{panic(err)}fmt.Println(string(origData))}//公鑰和私鑰可以從文件中讀取varprivateKey=[]byte(`-----BEGINRSAPRIVATEKEY-----MIICXQIBAAKBgQDZsfv1qscqYdy4vY+P4e3cAtmvppXQcRvrF1cB4drkv0haU24Y7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0DgacdwYWd/7PeCELyEipZJL07Vro7Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NLAUeJ6PeW+DAkmJWF6QIDAQABAoGBAJlNxenTQj6OfCl9FMR2jlMJjtMrtQT9InQEE7m3m7bLHeC+MCJOhmNVBjaMZpthDORdxIZ6oCuOf6Z2+Dl35lntGFh5J7S34UP2BWzF1IyyQfySCNexGNHKT1G1XKQtHmtc2gWWthEg+S6ciIyw2IGrrP2Rke81vYHExPrexf0hAkEA9Izb0MiYsMCB/jemLJB0Lb3Y/B8xjGjQFFBQT7bmwBVjvZWZVpnMnXi9sWGdgUpxsCuAIROXjZ40IRZ2C9EouwJBAOPjPvV8Sgw4vaseOqlJvSq/C/pIFx6RVznDGlc8bRg7SgTPpjHG4G+M3mVgpCX1a/EU1mB+fhiJ2LAZ/pTtY6sCQGaW9NwIWu3DRIVGCSMm0mYh/3X9DAcwLSJoctiODQ1Fq9rreDE5QfpJnaJdJfsIJNtX1F+L3YceeBXtW0Ynz2MCQBI89KP274Is5FkWkUFNKnuKUK4WKOuEXEO+LpR+vIhs7k6WQ8nGDd4/mujoJBr5mkrwDPwqA3N5TMNDQVGv8gMC CaKGJgWYgvo3/milFfImbp+m7/Y3vCptarldXrYQWOAQjxwc71ZGBFDITYvdgJM1MTqc8xQek1FXn1vfpy2c6O-----ENDRSAPRIVATEKEY-----`)varpublicKey=[]byte(`-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZsfv1qscqYdy4vY+P4e3cAtmvppXQcRvrF1cB4drkv0haU24Y7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0DgacdwYWd/7PeCELyEipZJL07Vro7Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NLAUeJ6PeW+DAkmJWF6QIDAQAB-----ENDPUBLICKEY-----`)//加密funcRsaEncrypt(origData[]byte)([]byte,error){block,_:=pem.Decode(publicKey)ifblock==nil{returnnil,errors.New("publickeyerror")}pubInterface,err:=x509.ParsePKIXPublicKey(block.Bytes)iferr!=nil{returnnil,err}pub:=pubInterface.(*rsa.PublicKey)returnrsa.EncryptPKCS1v15(rand.Reader,pub,origData)}//解密funcRsaDecrypt(ciphertext[]byte)([]byte,error){block,_:=pem.Decode(privateKey)ifblock==nil{returnnil,errors.New("privatekeyerror!")}priv,err:=x509.ParsePKCS1PrivateKey(block.Bytes)iferr!=nil{returnnil,err}returnrsa.DecryptPKCS1v15(rand.Reader,priv,ciphertext)}
成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目網(wǎng)站設計、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元通海做網(wǎng)站,已為上家服務,為通海各地企業(yè)和個人服務,聯(lián)系電話:18982081108
java 生成的私鑰 go語言為什么不能用來解密對應Java公鑰加密過的數(shù)據(jù)?
跟語言無關,跟加密算法有關。你如果調用公開的算法,用同樣的算子去加密解密,那用哪種需要都一樣,關鍵就是很多算法都有你不了解的細節(jié),有些算子是編程語言自己用了默認值,而他們彼此不同
通過Go語言創(chuàng)建CA與簽發(fā)證書
本篇文章中,將描述如何使用go創(chuàng)建CA,并使用CA簽署證書。在使用openssl創(chuàng)建證書時,遵循的步驟是 創(chuàng)建秘鑰 創(chuàng)建CA 生成要頒發(fā)證書的秘鑰 使用CA簽發(fā)證書。這種步驟,那么我們現(xiàn)在就來嘗試下。
首先,會從將從創(chuàng)建 CA 開始。 CA 會被用來簽署其他證書
接下來需要對證書生成公鑰和私鑰
然后生成證書:
我們看到的證書內容是PEM編碼后的,現(xiàn)在 caBytes 我們有了生成的證書,我們將其進行 PEM 編碼以供以后使用:
證書的 x509.Certificate 與CA的 x509.Certificate 屬性有稍微不同,需要進行一些修改
為該證書創(chuàng)建私鑰和公鑰:
有了上述的內容后,可以創(chuàng)建證書并用CA進行簽名
要保存成證書格式需要做PEM編碼
創(chuàng)建一個 ca.go 里面是創(chuàng)建ca和頒發(fā)證書的邏輯
如果需要使用的話,可以引用這些函數(shù)
panic: x509: unsupported public key type: rsa.PublicKey
這里是因為 x509.CreateCertificate 的參數(shù) privatekey 需要傳入引用變量,而傳入的是一個普通變量
extendedKeyUsage :增強型密鑰用法(參見"new_oids"字段):服務器身份驗證、客戶端身份驗證、時間戳。
keyUsage : 密鑰用法,防否認(nonRepudiation)、數(shù)字簽名(digitalSignature)、密鑰加密(keyEncipherment)。
文章來自
本文題目:go語言公私鑰的簡單介紹
文章分享:http://www.dlmjj.cn/article/dsedpod.html