golang非對稱加密

2021-10-17 05:13:48 字數 3185 閱讀 4131

通過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位快高 低非對稱演算法 加密金鑰和解密金鑰不同 名稱成熟...