㈠ 非對稱加密之ECC橢圓曲線(go語言實踐)
橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的演算法,基於橢圓曲線數學。橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。
ECC的主要優勢是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密演算法——提供相當的或更高等級的安全。
橢圓曲線密碼學的許多形式有稍微的不同,所有的都依賴於被廣泛承認的解決橢圓曲線離散對數問題的 困難性上。與傳統的基於大質數因子分解困難性的加密方法不同,ECC通過橢圓曲線方程式的性質產生密鑰。
ECC 164位的密鑰產生的一個安全級相當於RSA 1024位密鑰提供的保密強度,而且計算量較小,處理速度 更快,存儲空間和傳輸帶寬佔用較少。目前我國 居民二代身份證 正在使用 256 位的橢圓曲線密碼,虛擬 貨幣 比特幣 也選擇ECC作為加密演算法。
具體演算法詳解參考:
㈡ 怎麼用 GO 實現 RSA 的私鑰加密公鑰解密
packagemainimport("crypto/rand""crypto/rsa""crypto/x509""encoding/base64""encoding/pem""errors""flag""fmt")vardecryptedstringfuncinit(){flag.StringVar(&decrypted,"d","","加密過的數據")flag.Parse()}funcmain(){vardata[]bytevarerrerrorifdecrypted!=""{data,err=base64.StdEncoding.DecodeString(decrypted)iferr!=nil{panic(err)}}else{data,err=RsaEncrypt([]byte("[email protected]"))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-----++5C0DgacdwYWd/7PeCELyEipZJL07Vro7Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NLAUeJ6PeW++++/jemLJB0Lb3Y/8Sgw4vaseOqlJvSq/C/pIFx6RVznDGlc8bRg7SgTPpjHG4G+M3mVgpCX1a/EU1mB+fhiJ2LAZ//++LpR+vIhs7k6WQ8nGDd4/ CaKGJgWYgvo3/milFfImbp+m7/-----ENDRSAPRIVATEKEY-----`)varpublicKey=[]byte(`-----BEGINPUBLICKEY-----++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)}
㈢ Golang 綁定mac和ip地址,限制伺服器
實際業務:go 二進制文件在私有化部署中,需要對客戶的伺服器mac和ip進行綁定,系統只能運行在綁定的伺服器上。把mac和ip地址配置到config中。
運行效果:系統可正常編譯,正常訪問,在用戶Auth介面進行核對。
//檢驗Mac和內網IP,測試環境不做校驗
func (c *CommonBase)CheckMacAndIp()error {
ipCfg :=g.Cfg().GetString("machine.Ipaddr")
macCfg :=g.Cfg().GetString("machine.Macip")
if ipCfg =="127.0.0.1" {
return nil
}
macArray,_ :=gipv4.GetMacArray()
if len(macArray) ==0 {
return gerror.New("mac地址獲取失敗")
}
if garray.NewStrArrayFrom(macArray).Contains(macCfg) ==false {
return gerror.New("示授權的應用MAC,請聯系")
}
ipArray,_ :=gipv4.GetIpArray()
ipIntranetArray,_ :=gipv4.GetIntranetIpArray()
if len(ipArray) ==0 &&len(ipIntranetArray) ==0 {
return gerror.New("春激ip地旦裂址獲取失敗")
}
if garray.NewStrArrayFrom(ipArray).Merge(ipIntranetArray).Contains(ipCfg) ==false {
return gerror.New("示授權的應用IP,請聯系")
}
return nil
}
項目使用GoFrame框架1.6。考慮到客戶可模森閉能會對內存數據做分析破解,可以把mac和ip地址做AES加密。
㈣ golang base64 斜杠 等號 問題
寫一個介面認證的時候,密碼需要通過SHA1+HMAC加密以後轉base64,發現加密的結果不符合預期
shell裡面通過命令生成的字元串 golang生產的芹納畢結果有差別
具體的說,shell 生產的base64傳裡面有'/',對應golang生產的是茄爛'_',例如下面嫌芹案例
㈤ 如何用nodejs 解密 通過golang加密的文件
以下代碼採用AES192,128的類似
var crypto = require('crypto');var key = crypto.randomBytes(192/8); // 替換成自己需要的keyvar iv = crypto.randomBytes(128/8); // 替換成自己需要的ivvar algorithm = 'aes192';function encrypt(text){ var cipher = crypto.createCipheriv(algorithm, key, iv);
cipher.update(text); return cipher.final('hex');
}function decrypt(encrypted){ var decipher = crypto.createDecipheriv(algorithm, key, iv);
decipher.update(encrypted, 'hex'); return decipher.final('utf8');
}var content = 'hello';var crypted = encrypt('hello');console.log( crypted ); // 輸出: decrypted = decrypt( crypted );console.log( decrypted ); // 輸出:he
㈥ 通過Go語言創建CA與簽發證書
本篇文章中,將描述如何使用go創建CA,並使用CA簽署證書。在使用openssl創建證書時,遵循的步驟是 創建秘鑰此拍 > 創建CA > 生成要頒發證書的秘鑰 > 使用CA簽發證書。這種步驟,那麼我們現在就來嘗試下。
首先,會從將從創建 CA 開型穗始。 CA 會被用來簽署其他證書
接下來需要對證書生成公鑰和私鑰
然後生成證書:
我們看到的證書內容是PEM編碼後的,現在 caBytes 我們有了生成的證書,我們將其進行 PEM 編碼以供以後使用:
證書的 x509.Certificate 與CA的 x509.Certificate 屬性有稍微不同,需要進行一些修改
為該證書創建私鑰和公鑰:
有了上述的內容後,可以創建證書並用CA進行簽名
要保存成證書格式需要做PEM編碼
創建一個 ca.go 裡面是創建ca和頒發證書的邏輯
如果需要使用的話,可以引用這些函數
panic: x509: unsupported public key type: rsa.PublicKey
這里是因為 x509.CreateCertificate 的參數 privatekey 需要傳入引用變數,而傳入的是一個普通變數
extendedKeyUsage :增強型密鑰用法(參見"new_oids"欄位):伺服器身份驗證、客戶端身份驗證、時間戳。
keyUsage : 密鑰用法卜扒卜,防否認(nonRepudiation)、數字簽名(digitalSignature)、密鑰加密(keyEncipherment)。
文章來自https://www.cnblogs.com/Cylon/p/16436126.html
㈦ 哪位大神能把下面這段代碼從php轉成go
package main
import (
"fmt"
"github.com/tredoe/osutil/user/crypt/md5_crypt"
)
func main() {
salt := "ad"
md5Crypt := md5_crypt.New()
key := "admin@123"
hash, err := md5Crypt.Generate([]byte(key), []byte(salt))
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(hash)
}
㈧ golang crypt包的AES加密函數的使用
golang AES加密函數的使用
AES: Advanced Encryption Standard
高階加密標准,是用來代替 老的DES的。
AES加密演算法的加密塊必須是16位元組(128bit),所以不足部分需要填充,常用的填充演算法是PKCS7。
AES加密演算法的key可以是16位元組(AES128),或者24位元組(AES192),或者是32位元組(AES256)
ECB:Electronic Codebook Book
CBC:Cipher Block Chaining:這是最常見的塊加密實現
CTR:Counter
CFB:Cipher FeedBack
OFB:Output FeedBack
具體的差異我也沒去弄明白,知道這么個意思,加密演算法稍後差異。
包括AES,CBC,CTR,OFB,CFB,GCM。
這其中GCM不需要加密塊必須16位元組長度,可以是任意長度,其他的都需要16位元組對其,所以不足部分都需要補充。
3.1 AES
3.2 CBC
3.3 CTR
3.4 OFB
3.5 CFB
3.6 GCM
GCM實現演算法不需要pad。
㈨ Spring boot jar包加密(防止放在客戶端反編譯),XJar加密
需求常用但是時間不常有。有些能客戶接觸到jar包就很尷尬了。不要問為什麼尷尬。
1.首先目標系統-阿里鏡像 Centos8.2 不重要 有yum就行,主要環境是golang俗稱go
2.上操作
3.版本確認,檢查
4.把文件傳到linux上,注意需要兩個文件!重點別漏了 new.jar 和 xjar.go
5.cd到目錄,操作
6.得到如下文件
7.運行jar,普通運行
9.打成系統服務systemctl這個不講了,網路,或者我其他文章有
4.得到xjar.exe,跟linux差不多操作了
5.cd到目錄,然後操作
㈩ go語言 md5加密的密碼怎樣解密
理論上是不能破解的,因為md5採用的是不可逆演算法。
有的網站上提供MD5解密,是因為有大量的存儲空間來保存源碼和加密後的密碼,當解密時就是一個查詢的過程,稍微復雜點的查詢就無法完成。