橢圓曲線密碼學(xué)(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的算法,基于橢圓曲線數(shù)學(xué)。橢圓曲線在密碼學(xué)中的使用是在1985年由Neal Koblitz和Victor Miller分別獨(dú)立提出的。
創(chuàng)新互聯(lián)主營朝陽網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),朝陽h5微信平臺(tái)小程序開發(fā)搭建,朝陽網(wǎng)站營銷推廣歡迎朝陽等地區(qū)企業(yè)咨詢
ECC的主要優(yōu)勢(shì)是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密算法——提供相當(dāng)?shù)幕蚋叩燃?jí)的安全。
橢圓曲線密碼學(xué)的許多形式有稍微的不同,所有的都依賴于被廣泛承認(rèn)的解決橢圓曲線離散對(duì)數(shù)問題的 困難性上。與傳統(tǒng)的基于大質(zhì)數(shù)因子分解困難性的加密方法不同,ECC通過橢圓曲線方程式的性質(zhì)產(chǎn)生密鑰。
ECC 164位的密鑰產(chǎn)生的一個(gè)安全級(jí)相當(dāng)于RSA 1024位密鑰提供的保密強(qiáng)度,而且計(jì)算量較小,處理速度 更快,存儲(chǔ)空間和傳輸帶寬占用較少。目前我國 居民二代身份證 正在使用 256 位的橢圓曲線密碼,虛擬 貨幣 比特幣 也選擇ECC作為加密算法。
具體算法詳解參考:
golang AES加密函數(shù)的使用
AES: Advanced Encryption Standard
高階加密標(biāo)準(zhǔn),是用來代替 老的DES的。
AES加密算法的加密塊必須是16字節(jié)(128bit),所以不足部分需要填充,常用的填充算法是PKCS7。
AES加密算法的key可以是16字節(jié)(AES128),或者24字節(jié)(AES192),或者是32字節(jié)(AES256)
ECB:Electronic Codebook Book
CBC:Cipher Block Chaining:這是最常見的塊加密實(shí)現(xiàn)
CTR:Counter
CFB:Cipher FeedBack
OFB:Output FeedBack
具體的差異我也沒去弄明白,知道這么個(gè)意思,加密算法稍后差異。
包括AES,CBC,CTR,OFB,CFB,GCM。
這其中GCM不需要加密塊必須16字節(jié)長度,可以是任意長度,其他的都需要16字節(jié)對(duì)其,所以不足部分都需要補(bǔ)充。
3.1 AES
3.2 CBC
3.3 CTR
3.4 OFB
3.5 CFB
3.6 GCM
GCM實(shí)現(xiàn)算法不需要pad。
Linux 是不需要安裝的,直接用 chmod -x 文件名 將它的屬性修改為可運(yùn)行,然后就可以通過命令行執(zhí)行它了,后綴名你改為 .sh ,這是 shell 默認(rèn)支持的文件類型
你在編譯器里面build一下,然后去\bin\debug目錄下找.exeexe就是可執(zhí)行文件了。運(yùn)行的時(shí)候可能需要用到debug目錄下的其他文件(如配置文件、dll等),所以需要把debug下的所有文件都放到一起。
1、解壓壓縮包到go工作目錄,如解壓到E:\opensource\go\go,解壓后的目錄結(jié)構(gòu)如下:
E:\opensource\go\go
├─api
├─bin
│ ├─go.exe
│ ├─godoc.exe
│ └─gofmt.exe
├─doc
├─include
├─lib
├─misc
├─pkg
├─src
└─test
2、增加環(huán)境變量GOROOT,取值為上面的go工作目錄
3、Path環(huán)境變量中添加";%GOROOT%\bin",以便能夠直接調(diào)用go命令來編譯go代碼,至此go編譯環(huán)境就配置好了
注:如果不想手動(dòng)設(shè)置系統(tǒng)環(huán)境變量,也可下載go啟動(dòng)環(huán)境批處理附件,
修改goenv.bat文件中的GOROOT值為上面的go工作目錄后直接雙擊該bat文件,go編譯環(huán)境變量即設(shè)置完成。
4、測(cè)試go編譯環(huán)境,啟動(dòng)一個(gè)cmd窗口,直接輸入go,看到下面的提示就是搭建成功了
E:\opensource\go\gogo
Go is a tool for managing Go source code.
Usage:
go command [arguments]
The commands are:
build compile packages and dependencies
clean remove object files
doc run godoc on package sources
env print Go environment information
fix run go tool fix on packages
fmt run gofmt on package sources
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages
Use "go help [command]" for more information about a command.
Additional help topics:
gopath GOPATH environment variable
packages description of package lists
remote remote import path syntax
testflag description of testing flags
testfunc description of testing functions
Use "go help [topic]" for more information about that topic.
5、編譯helloworld測(cè)試程序,go語言包中test目錄帶有helloworld.go測(cè)試程序,源碼見"附一 helloworld.go",
直接調(diào)用"go build helloworld.go"就生成了"helloworld.exe"可執(zhí)行程序,運(yùn)行一下這個(gè)程序看到了我們期望的hello,wolrd。
E:\opensource\go\go\testgo build helloworld.go
E:\opensource\go\go\testhelloworld.exe
hello, world
E:\opensource\go\go\test
附一 helloworld.go
// cmpout
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test that we can do page 1 of the C book.
package main
func main() {
print("hello, world\n")
}
Go 語言和 C 語言的一個(gè)很大的區(qū)別是, Go 語言只靜態(tài)編譯,做個(gè)測(cè)試:
一方面是 Go 語言編譯后的可執(zhí)行文件大小比 C 語言的大很多,
另一方面是 C 語言的可執(zhí)行文件需要依賴 glibc 動(dòng)態(tài)庫,
用 ldd 命令可以看出來:
或者直接刪除 glibc 動(dòng)態(tài)庫, C 可執(zhí)行程序報(bào)錯(cuò),而 Go 的還能運(yùn)行:
這時(shí)候只有內(nèi)部命令可以運(yùn)行,外部命令,包括 ln 甚至最常用的 ls 命令也不能運(yùn)行了:
設(shè)置好 LD_PRELOAD 環(huán)境變量之后, ln 命令可以運(yùn)行,但是 sudo 仍然不能運(yùn)行
只能靠 root 用戶來重新創(chuàng)建軟連接了:
所以用 sudo 來 rm 文件要小心,還是用 root 比較好。如果沒有預(yù)先留一個(gè)打開的 root 終端,登錄都登不進(jìn)去。