<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 非對稱加解密 ## 密鑰生成流程 - 生成私鑰操作流程概述 > 1. 使用rsa中的GenerateKey方法生成私鑰 > > func GenerateKey(random io.Reader, bits int) (priv *PrivateKey, err error) > > - rand.Reader -> import "crypto/rand" > - 1024 的整數倍 - 建議 > > 2. 通過x509標準將得到的ras私鑰序列化為ASN.1 的 DER編碼字符串 > > func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte > > 3. 將私鑰字符串設置到pem格式塊中 > > 初始化一個pem.Block塊 > > ```go > type Block struct { > Type string // 得自前言的類型(如"RSA PRIVATE KEY") > Headers map[string]string // 可選的頭項 > Bytes []byte // 內容解碼后的數據,一般是DER編碼的ASN.1結構 > } > ``` > > 4. 通過pem將設置好的數據進行編碼, 并寫入磁盤文件中 > > func Encode(out io.Writer, b *Block) error > > - out - 準備一個文件指針 - 生成公鑰操作流程 > 1. 從得到的私鑰對象中將公鑰信息取出 > > ```go > type PrivateKey struct { > PublicKey // 公鑰 > D *big.Int // 私有的指數 > Primes []*big.Int // N的素因子,至少有兩個 > // 包含預先計算好的值,可在某些情況下加速私鑰的操作 > Precomputed PrecomputedValues > } > ``` > > 2. 通過x509標準將得到 的rsa公鑰序列化為字符串 > > ``` > func MarshalPKIXPublicKey(pub interface{}) ([]byte, error) > ``` > > 3. 將公鑰字符串設置到pem格式塊中 > > type Block struct { > Type string // 得自前言的類型(如"RSA PRIVATE KEY") > Headers map[string]string // 可選的頭項 > Bytes []byte // 內容解碼后的數據,一般是DER編碼的ASN.1結構 > } > > 4. 通過pem將設置好的數據進行編碼, 并寫入磁盤文件 > > func Encode(out io.Writer, b *Block) error ## RSA加解密 ### RSA加密 > 1. 將公鑰文件中的公鑰讀出, 得到使用pem編碼的字符串 > > -- 讀文件 > > 2. 將得到的字符串解碼 > > -- pem.Decode > > 3. 使用x509將編碼之后的公鑰解析出來 > > -- func ParsePKCS1PrivateKey(der []byte) (key *rsa.PrivateKey, err error) > > 4. 使用得到的公鑰通過rsa進行數據加密 > ### RSA解密 > 1. 將私鑰文件中的私鑰讀出, 得到使用pem編碼的字符串 > 2. 將得到的字符串解碼 > 3. 使用x509將編碼之后的私鑰解析出來 > 4. 使用得到的私鑰通過rsa進行數據解密 ## 使用 ~~~ import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "crypto/x509" "encoding/hex" "encoding/pem" "fmt" "os" ) // 生成rsa的密鑰對, 并且保存到磁盤文件中 func GenerateRsaKey(keySize int) { // 1. 使用rsa中的GenerateKey方法生成私鑰 privateKey, err := rsa.GenerateKey(rand.Reader, keySize) if err != nil { panic(err) } // 2. 通過x509標準將得到的ras私鑰序列化為ASN.1 的 DER編碼字符串 derText := x509.MarshalPKCS1PrivateKey(privateKey) // 3. 要組織一個pem.Block(base64編碼) // 里面還有個Headers屬性可以寫可以不寫 block := pem.Block{ Type : "rsa private key", // 這個地方寫個字符串就行 Bytes : derText, } // 4. pem編碼 file, err := os.Create("private.pem") if err != nil { panic(err) } pem.Encode(file, &block) file.Close() // ============ 公鑰 ========== // 1. 從私鑰中取出公鑰 publicKey := privateKey.PublicKey // 2. 使用x509標準序列化 derstream, err := x509.MarshalPKIXPublicKey(&publicKey) if err != nil { panic(err) } // 3. 將得到的數據放到pem.Block中 block = pem.Block{ Type : "rsa public key", // 這個地方寫個字符串就行 Bytes : derstream, } // 4. pem編碼 file, err = os.Create("public.pem") if err != nil { panic(err) } pem.Encode(file, &block) file.Close() } // RSA 加密, 公鑰加密 func RSAEncrypt(plainText []byte, fileName string) []byte{ // 1. 打開文件, 并且讀出文件內容 file, err := os.Open(fileName) if err != nil { panic(err) } fileInfo, err := file.Stat() if err != nil { panic(err) } buf := make([]byte, fileInfo.Size()) file.Read(buf) file.Close() // 2. pem解碼 block, _ := pem.Decode(buf) pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) //斷言類型轉換 pubKey := pubInterface.(*rsa.PublicKey) // 3. 使用公鑰加密 cipherText, err := rsa.EncryptPKCS1v15(rand.Reader, pubKey, plainText) if err != nil { panic(err) } return cipherText } // RSA 解密 func RSADecrypt(cipherText []byte, fileName string) []byte{ // 1. 打開文件, 并且讀出文件內容 file, err := os.Open(fileName) if err != nil { panic(err) } fileInfo, err := file.Stat() if err != nil { panic(err) } 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 { panic(err) } // 3. 使用私鑰解密 plainText, err := rsa.DecryptPKCS1v15(rand.Reader, privKey, cipherText) if err != nil { panic(err) } return plainText } //測試文件 func main() { GenerateRsaKey(4096) src := []byte("abc abc...") cipherText := RSAEncrypt(src, "public.pem") plainText := RSADecrypt(cipherText, "private.pem") fmt.Println(string(plainText)) myHash() myHash() } // 使用sha256 func myHash() { // sha256.Sum256([]byte("hello, go")) // 1. 創建哈希接口對象 myHash := sha256.New() // 2. 添加數據 src := []byte("123 123...") myHash.Write(src) myHash.Write(src) myHash.Write(src) // 3. 計算結果 res := myHash.Sum(nil) // 4. 格式化為16進制形式 myStr := hex.EncodeToString(res) fmt.Printf("%s\n", myStr) } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看