色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Go語言做對稱加密怎么做

開關電源芯片 ? 來源:CSDN博客 ? 作者:尹成學院 ? 2021-08-23 09:44 ? 次閱讀

【導讀】什么是對稱加密?Go 語言做對稱加密怎么做?本文作者從加密原理到代碼實現帶你上車。

對稱加密中,加密和解密使用相同的密鑰,因此必須向解密者配送密鑰,即密鑰配送問題。而非對稱加密中,由于加密和解密分別使用公鑰和私鑰,而公鑰是公開的,因此可以規避密鑰配送問題。非對稱加密算法,也稱公鑰加密算法。

1977 年,Ron Rivest、Adi Shamir、Leonard Adleman 三人在美國公布了一種公鑰加密算法,即 RSA 公鑰加密算法。RSA 是目前最有影響力和最常用的公鑰加密算法,可以說是公鑰加密算法的事實標準。

一、RSA 加密原理

使用 M 和 C 分別表示明文和密文,則 RSA 加密、解密過程如下:

img

其中 e、n 的組合 (e, n) 即為公鑰,d、n 的組合 (d, n) 即為私鑰。當然 e、d、n 并非任意取值,需要符合一定條件,如下即為 e、d、n 的求解過程。

生成密鑰對

e、d、n 的求解過程,也即生成密鑰對的過程。涉及如下步驟:1、取兩個大質數(也稱素數)p、q,n = pq。2、取正整數 e、d,使得 ed mod (p-1)(q-1) = 1,也即:ed ≡ 1 mod (p-1)(q-1)。e 和 d 是模 (p-1)(q-1) 的乘法逆元,僅當 e 與 (p-1)(q-1) 互質時,存在 d。舉例驗證:1、取 p、q 分別為 13、17,n = pq = 221。2、而 (p-1)(q-1) = 12x16 = 192,取 e、d 分別為 13、133,有 13x133 mod 192 = 1取明文 M = 60,公鑰加密、私鑰解密,

RSA 加密原理證明過程

手動求解密鑰對中的 d

ed mod (p-1)(q-1) = 1,已知 e 和 (p-1)(q-1) 求 d,即求 e 對模 (p-1)(q-1) 的乘法逆元。如上面例子中,p、q 為 13、17,(p-1)(q-1)=192,取 e=13,求 13d mod 192 = 1 中的 d。13d ≡ 1 (mod 192),在右側添加 192 的倍數,使計算結果可以被 13 整除。13d ≡ 1 + 192x9 ≡ 13x133 (mod 192),因此 d = 133其他計算方法有:費馬小定律、擴展歐幾里得算法、歐拉定理。

RSA 安全性

由于公鑰公開,即 e、n 公開。因此破解 RSA 私鑰,即為已知 e、n 情況下求 d。因 ed mod (p-1)(q-1) = 1,且 n=pq,因此該問題演變為:對 n 質因數分解求 p、q。目前已被證明,已知 e、n 求 d 和對 n 質因數分解求 p、q 兩者是等價的。實際中 n 長度為 2048 位以上,而當 n》200 位時分解 n 是非常困難的,因此 RSA 算法目前仍被認為是安全實用的。

RSA 計時***和防范

RSA 解密的本質是模冪運算

img

其中 C 為密文,(d,n) 為私鑰,均為超過 1024 位的大數運算,直接計算并不可行,因此最經典的算法為蒙哥馬利算法。而這種計算是比較是耗時的,因此者可以觀察不同的輸入對應的解密時間,通過分析推斷私鑰,稱為計時。而防范 RSA 計時的辦法,即在解密時加入隨機因素,使得***者無法準確獲取解密時間。

二、Go RSA 加密解密

1、rsa 加解密,必然會去查 crypto/ras 這個包

Package rsa implements RSA encryption as specified in PKCS#1.

這是該包的說明:實現 RSA 加密技術,基于 PKCS#1 規范。

對于什么是 PKCS#1,可以查閱相關資料。PKCS(公鑰密碼標準),而#1 就是 RSA 的標準。可以查看:PKCS 系列簡介

從該包中函數的名稱,可以看到有兩對加解密的函數。

EncryptOAEP 和 DecryptOAEPEncryptPKCS1v15 和 DecryptPKCS1v15

這稱作加密方案,詳細可以查看,PKCS #1 v2.1 RSA 算法標準

可見,當與其他語言交互時,需要確定好使用哪種方案。

PublicKey 和 PrivateKey 兩個類型分別代表公鑰和私鑰,關于這兩個類型中成員該怎么設置,這涉及到 RSA 加密算法,本文中,這兩個類型的實例通過解析文章開頭生成的密鑰得到。

2、解析密鑰得到 PublicKey 和 PrivateKey 的實例

這個過程,我也是花了好些時間(主要對各種加密的各種東東不熟):怎么將 openssl 生成的密鑰文件解析到公鑰和私鑰實例呢?

在 encoding/pem 包中,看到了—–BEGIN Type—–這樣的字樣,這正好和 openssl 生成的密鑰形式差不多,那就試試。

在該包中,一個 block 代表的是 PEM 編碼的結構,關于 PEM,請查閱相關資料。我們要解析密鑰,當然用 Decode 方法:

func Decode(data []byte) (p *Block, rest []byte)

這樣便得到了一個 Block 的實例(指針)。

解析來看 crypto/x509。為什么是 x509 呢?這又涉及到一堆概念。先不管這些,我也是看 encoding 和 crypto 這兩個包的子包摸索出來的。在 x509 包中,有一個函數:

func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error)

從該函數的說明:ParsePKIXPublicKey parses a DER encoded public key. These values are typically found in PEM blocks with “BEGIN PUBLIC KEY”。可見這就是解析 PublicKey 的。另外,這里說到了 PEM,可以上面的 encoding/pem 對了。(PKIX 是啥東東,查看這里 )

而解析私鑰的,有好幾個方法,從上面的介紹,我們知道,RSA 是 PKCS#1,剛好有一個方法:

func ParsePKCS1PrivateKey(der []byte) (key *rsa.PrivateKey, err error)

返回的就是 rsa.PrivateKey。

代碼實現:

package main

import (

“crypto/rsa”

“crypto/rand”

“crypto/x509”

“encoding/pem”

“os”

“fmt”

func RSAGenKey(bits int) error {

/*

生成私鑰

*/

//1、使用 RSA 中的 GenerateKey 方法生成私鑰

privateKey, err := rsa.GenerateKey(rand.Reader, bits)

if err != nil {

return err

}

//2、通過 X509 標準將得到的 RAS 私鑰序列化為:ASN.1 的 DER 編碼字符串

privateStream := x509.MarshalPKCS1PrivateKey(privateKey)

//3、將私鑰字符串設置到 pem 格式塊中

block1 := pem.Block{

Type: “private key”,

Bytes: privateStream,

}

//4、通過 pem 將設置的數據進行編碼,并寫入磁盤文件

fPrivate, err := os.Create(“privateKey.pem”)

if err != nil {

return err

}

defer fPrivate.Close()

err = pem.Encode(fPrivate, &block1)

if err != nil {

return err

}

/*

生成公鑰

*/

publicKey:=privateKey.PublicKey

publicStream,err:=x509.MarshalPKIXPublicKey(&publicKey)

//publicStream:=x509.MarshalPKCS1PublicKey(&publicKey)

block2:=pem.Block{

Type:“public key”,

Bytes:publicStream,

}

fPublic,err:=os.Create(“publicKey.pem”)

if err!=nil {

return err

}

defer fPublic.Close()

pem.Encode(fPublic,&block2)

return nil

}

//對數據進行加密操作

func EncyptogRSA(src []byte,path string) (res []byte,err error) {

//1. 獲取秘鑰(從本地磁盤讀取)

f,err:=os.Open(path)

if err!=nil {

return

}

defer f.Close()

fileInfo,_:=f.Stat()

b:=make([]byte,fileInfo.Size())

f.Read(b)

// 2、將得到的字符串解碼

block,_:=pem.Decode(b)

// 使用 X509 將解碼之后的數據 解析出來

//x509.MarshalPKCS1PublicKey(block): 解析之后無法用,所以采用以下方法:ParsePKIXPublicKey

keyInit,err:=x509.ParsePKIXPublicKey(block.Bytes) //對應于生成秘鑰的 x509.MarshalPKIXPublicKey(&publicKey)

//keyInit1,err:=x509.ParsePKCS1PublicKey(block.Bytes)

if err!=nil {

return

}

//4. 使用公鑰加密數據

pubKey:=keyInit.(*rsa.PublicKey)

res,err=rsa.EncryptPKCS1v15(rand.Reader,pubKey,src)

return

}

//對數據進行解密操作

func DecrptogRSA(src []byte,path string)(res []byte,err error) {

//1. 獲取秘鑰(從本地磁盤讀取)

f,err:=os.Open(path)

if err!=nil {

return

}

defer f.Close()

fileInfo,_:=f.Stat()

b:=make([]byte,fileInfo.Size())

f.Read(b)

block,_:=pem.Decode(b)//解碼

privateKey,err:=x509.ParsePKCS1PrivateKey(block.Bytes)//還原數據

res,err=rsa.DecryptPKCS1v15(rand.Reader,privateKey,src)

return

}

func main() {

//rsa.GenerateKey()

err:=RSAGenKey(4096)

if err!=nil {

fmt.Println(err)

return

}

fmt.Println(“秘鑰生成成功!”)

str:=“山重水復疑無路,柳暗花明又一村!”

fmt.Println(“加密之前的數據為:”,string(str))

data,err:=EncyptogRSA([]byte(str),“publicKey.pem”)

data,err=DecrptogRSA(data,“privateKey.pem”)

fmt.Println(“加密之后的數據為:”,string(data))

}

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70253
  • RSA
    RSA
    +關注

    關注

    0

    文章

    59

    瀏覽量

    19191

原文標題:GO 語言 RSA 加密解密

文章出處:【微信號:gh_3980db2283cd,微信公眾號:開關電源芯片】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    如何在MBDT中使用S32k344進行加密

    我想加密和解密通過 CAN 總線發送的數據,為此我想使用 S32k344 中的 HSE 模塊在 MBDT 1.5 中進行對稱加密-解密,但工具箱中沒有可用的塊。那我該怎么做呢。請分享與
    發表于 03-25 07:21

    proteus里沒有原件,怎么做電路圖啊?

    proteus里沒有原件,怎么做電路圖啊?
    發表于 02-19 10:44

    企業AI模型托管怎么做

    當下,越來越多的企業選擇將AI模型托管給專業的第三方平臺,以實現高效、靈活和安全的模型運行。下面,AI部落小編為您介紹企業AI模型托管是怎么做的。
    的頭像 發表于 01-15 10:10 ?338次閱讀

    EMMC數據加密技術與應用

    特點,但同時也面臨著數據泄露的風險。 數據加密技術概述 數據加密技術是保護數據不被未授權訪問的有效手段。它通過將明文數據轉換成密文,確保只有擁有正確密鑰的用戶才能解密并訪問原始數據。 對稱加密
    的頭像 發表于 12-25 09:51 ?1052次閱讀

    云服務器怎么做負載均衡?

    云 服務器怎么做負載均衡 ? 云服務器的負載均衡通過分配策略、自動擴展、健康檢查和跨區域部署四個核心技術來實現。 分配策略包括輪詢、權重分配和最少連接數,確保流量均勻分配。自動擴展根據實時監控動態
    的頭像 發表于 12-24 10:40 ?348次閱讀

    對稱加密技術有哪些常見的安全漏洞?

    對稱加密技術在實際應用中可能面臨的安全漏洞主要包括: 實現不當: 錯誤的加解密實現、弱隨機數生成器或其他邏輯錯誤都可能導致安全漏洞。 漏洞利用: 利用已知的弱點或攻擊手段,如理論上可行的分組攻擊或側
    的頭像 發表于 12-16 13:59 ?545次閱讀

    對稱加密技術在實際應用中如何保障數據安全?

    對稱加密技術在實際應用中保障數據安全主要通過以下幾個方面: 密鑰的安全性: 對稱加密的安全性高度依賴于密鑰的保密性。一旦密鑰泄露,加密的數據
    的頭像 發表于 12-16 13:59 ?567次閱讀

    在學習go語言的過程踩過的坑

    作為一個5年的phper,這兩年公司和個人都在順應技術趨勢,新項目慢慢從php轉向了go語言,從2021年到現在,筆者手上也先后開發了兩個go項目。在學習go
    的頭像 發表于 11-11 09:22 ?398次閱讀

    云存儲服務中的數據加密技術

    隨著云計算技術的快速發展,越來越多的企業和個人開始將數據存儲在云平臺上。然而,數據安全問題也隨之成為人們關注的焦點。為了保護數據的安全性和隱私性,云存儲服務提供商采用了多種數據加密技術。 對稱加密
    的頭像 發表于 10-28 15:04 ?1049次閱讀

    go語言如何解決并發問題

    作為一個后端開發,日常工作中接觸最多的兩門語言就是PHP和GO了。無可否認,PHP確實是最好的語言(手動狗頭哈哈),寫起來真的很舒爽,沒有任何心智負擔,字符串和整型壓根就不用區分,開發速度真的是比
    的頭像 發表于 10-23 13:38 ?399次閱讀
    <b class='flag-5'>go</b><b class='flag-5'>語言</b>如何解決并發問題

    三十分鐘入門基礎Go Java小子版

    前言 Go語言定義 Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態、強類型、編譯型語言
    的頭像 發表于 08-12 14:32 ?936次閱讀
    三十分鐘入門基礎<b class='flag-5'>Go</b> Java小子版

    nlp自然語言處理模型怎么做

    自然語言處理(Natural Language Processing,簡稱NLP)是人工智能領域的一個重要分支,它涉及到計算機對人類語言的理解和生成。隨著深度學習技術的發展,NLP領域取得了顯著
    的頭像 發表于 07-05 09:59 ?1051次閱讀

    ESP32S2如何flash加密

    用的IDF是4.4的。準備給ESP32S2flash加密,找到的資料都是比較老的 現在就想做個密鑰,然后給flash加密。 按照網上的說明。。然后我這邊報這個錯誤。
    發表于 06-18 06:43

    c語言怎么做可視化界面

    C語言是一種通用的編程語言,廣泛應用于系統編程、嵌入式開發等領域。雖然C語言本身并不支持直接創建可視化界面,但通過結合一些圖形庫和工具,我們可以為C語言程序開發出直觀、易用的可視化界面
    的頭像 發表于 06-06 10:46 ?3356次閱讀

    請問下使用IDF怎么做用git版本控制?

    請問下使用IDF怎么做用git版本控制?是保存自己應用部分的代碼還是整個SDK都要保存,但是整個框架都是官方下的,有沒必要保存,求各位大神告知下你們怎么處理的。
    發表于 06-06 07:15
    主站蜘蛛池模板: 欧美亚洲国产手机在线有码 | 97夜夜澡人人爽人人模人人喊 | 国产成人久久精品AV | 换脸国产AV一区二区三区 | 韩国演艺圈qvod | 国产亚洲精品久久久久久国模美 | av天堂影音先锋在线 | 少妇高潮惨叫久久久久久欧美 | chinese东北夫妻video | 久久久久久久久久综合情日本 | 狠狠色欧美亚洲狠狠色www | yellow免费观看在线 | 麻豆一区二区免费播放网站 | 首页 国产 亚洲 中文字幕 | 久久国产亚洲精品AV麻豆 | 抽插喷S骚爽去了H | 十九岁在线观看免费完整版电影 | 欧美一第一页草草影院 | 校园刺激全黄H全肉细节文 校园纯肉H教室第一次 | 国产手机在线视频 | 小776 论坛 | 狠狠干老司机 | 久久久乱码精品亚洲日韩 | 丰满少妇被猛烈进出69影院 | 日本后进式猛烈xx00动态图 | 一本之道高清在线观看免费 | 色偷偷888欧美精品久久久 | 果冻传媒AV精品一区 | se01国产短视频在线观看 | 风月宝鉴之淫乱英雄传 电影 | 91久久精品一区二区三区 | 4k岛国精品午夜高清在线观看 | 狠狠射首页 | 国产成人理在线观看视频 | 午夜福利电影网站鲁片大全 | 婷婷综合久久狠狠色 | 久久久综合中文字幕久久 | 飘雪韩国在线观看免费高清完整版 | 国产欧美一区二区精品仙草咪 | 国产 亚洲 日韩 欧美 在线观看 | 乱亲女H秽乱长久久久 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品