通過x509標準將得到的ras私鑰序列化為asn.1 的 der編碼字串
func marshalpkcs1privatekey(key *rsa.privatekey) byte
將私鑰字串設定到pem格式塊中
初始化乙個pem.block塊
type block struct
通過pem將設定好的資料進行編碼, 並寫入磁碟檔案中
func encode(out io.writer, b *block) error
生成公鑰操作流程
從得到的私鑰物件中將公鑰資訊取出type privatekey struct
通過x509標準將得到 的rsa公鑰序列化為字串
func marshalpkixpublickey(pub inte***ce{}) (byte, error)
將公鑰字串設定到pem格式塊中
type block struct
通過pem將設定好的資料進行編碼, 並寫入磁碟檔案
func encode(out io.writer, b *block) error
將公鑰檔案中的公鑰讀出, 得到使用pem編碼的字串-- 讀檔案
將得到的字串解碼
-- pem.decode
使用x509將編碼之後的公鑰解析出來
-- func parsepkcs1privatekey(der byte) (key *rsa.privatekey, err error)
使用得到的公鑰通過rsa進行資料加密
將私鑰檔案中的私鑰讀出, 得到使用pem編碼的字串將得到的字串解碼
使用x509將編碼之後的私鑰解析出來
使用得到的私鑰通過rsa進行資料解密
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha256"
"crypto/x509"
"encoding/hex"
"encoding/pem"
"fmt"
"os"
)// 生成rsa的金鑰對, 並且儲存到磁碟檔案中
func generatersakey(keysize int)
// 2. 通過x509標準將得到的ras私鑰序列化為asn.1 的 der編碼字串
dertext := x509.marshalpkcs1privatekey(privatekey)
// 3. 要組織乙個pem.block(base64編碼)
// 裡面還有個headers屬性可以寫可以不寫
block := pem.block
// 4. pem編碼
file, err := os.create("private.pem")
if err != nil
pem.encode(file, &block)
file.close()
// **********== 公鑰 **********
// 1. 從私鑰中取出公鑰
publickey := privatekey.publickey
// 2. 使用x509標準序列化
derstream, err := x509.marshalpkixpublickey(&publickey)
if err != nil
// 3. 將得到的資料放到pem.block中
block = pem.block
// 4. pem編碼
file, err = os.create("public.pem")
if err != nil
pem.encode(file, &block)
file.close()
}// rsa 加密, 公鑰加密
func rsaencrypt(plaintext byte, filename string) byte
fileinfo, err := file.stat()
if err != nil
buf := make(byte, fileinfo.size())
file.read(buf)
file.close()
// 2. pem解碼
block, _ := pem.decode(buf)
pubinte***ce, err := x509.parsepkixpublickey(block.bytes)
//斷言型別轉換
pubkey := pubinte***ce.(*rsa.publickey)
// 3. 使用公鑰加密
ciphertext, err := rsa.encryptpkcs1v15(rand.reader, pubkey, plaintext)
if err != nil
return ciphertext
}// rsa 解密
func rsadecrypt(ciphertext byte, filename string) byte
fileinfo, err := file.stat()
if err != nil
buf := make(byte, fileinfo.size())
file.read(buf)
file.close()
// 2. pem解碼
block, _ := pem.decode(buf)
privkey, err := x509.parsepkcs1privatekey(block.bytes)
if err != nil
// 3. 使用私鑰解密
plaintext, err := rsa.decryptpkcs1v15(rand.reader, privkey, ciphertext)
if err != nil
return plaintext
}//測試檔案
func main()
// 使用sha256
func myhash()
對稱加密 非對稱加密
區別在於加密金鑰和解密金鑰是否一樣,一樣則是對稱加密,不一樣則是非對稱加密。對稱加密計算量小,但若不同的客戶端使用不能的金鑰時,伺服器的複雜大。常用的對稱加密包括 des 3des aes des 3des使用的架構為feistel。des金鑰長度為56位,3des相容des,可設定3個56位密碼,...
對稱加密 非對稱加密
1 對稱加密 對稱加密採用了對稱密碼編碼技術,它的特點是檔案加密和解密使用相同的金鑰,即加密金鑰也可以用作解密金鑰,這種方法在密碼學中叫做對稱加密演算法,對稱加密演算法使用起來簡單快捷,金鑰較短,且破譯困難,除了資料加密標準 des 另乙個對稱金鑰加密系統是國際資料加密演算法 idea 它比des的...
對稱加密 非對稱加密
演算法選擇 對稱加密aes,非對稱加密 ecc,訊息摘要 md5,數字簽名 dsa 對稱加密演算法 加解密金鑰相同 名稱金鑰長度 運算速度 安全性資源消耗 des56位較快低 中3des 112位或168位慢中 高aes 128 192 256位快高 低非對稱演算法 加密金鑰和解密金鑰不同 名稱成熟...