DES(Data Encryption Standard)是一種常見的分組加密算法,由IBM公司在1971年提出。它是一種對稱加密算法,也就是說它使用同一個密鑰來加密和解密數(shù)據(jù)。
成都創(chuàng)新互聯(lián)是專業(yè)的尼瑪網(wǎng)站建設公司,尼瑪接單;提供成都做網(wǎng)站、網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行尼瑪網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
DES使用一個56位的初始密鑰,但是這里提供的是一個64位的值,這是因為在硬件實現(xiàn)中每8位可以用于奇偶校驗。可以通過設定8位字符串,由 crypto/des 庫的 des.NewCipher(key) 函數(shù)生成密鑰
DES分組的大小是64位,如果加密的數(shù)據(jù)長度不是64位的倍數(shù),可以按照某種具體的規(guī)則來填充位。常用的填充算法有 pkcs5 , zero 等
golang AES加密函數(shù)的使用
AES: Advanced Encryption Standard
高階加密標準,是用來代替 老的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:這是最常見的塊加密實現(xiàn)
CTR:Counter
CFB:Cipher FeedBack
OFB:Output FeedBack
具體的差異我也沒去弄明白,知道這么個意思,加密算法稍后差異。
包括AES,CBC,CTR,OFB,CFB,GCM。
這其中GCM不需要加密塊必須16字節(jié)長度,可以是任意長度,其他的都需要16字節(jié)對其,所以不足部分都需要補充。
3.1 AES
3.2 CBC
3.3 CTR
3.4 OFB
3.5 CFB
3.6 GCM
GCM實現(xiàn)算法不需要pad。
了解如何使用Go加密和解密數(shù)據(jù)。 請記住,這不是一門關(guān)于密碼學的課程,而是一門用Go語言實現(xiàn)的課程。
你有一個文件和一個密碼,并且想要使用密碼對文件進行加密。
有很多加密算法。
本章介紹如何在GCM模式下使用對稱算法AES(高級加密標準)。
GCM模式同時提供加密和身份驗證。
未經(jīng)身份驗證,攻擊者可能會更改加密字節(jié),這將導致解密成功但數(shù)據(jù)損壞。 通過添加身份驗證,GCM模式可以檢測到加密數(shù)據(jù)已損壞。
對稱意味著我們可以使用相同的密碼來加密和解密數(shù)據(jù)。
AES使用16個字節(jié)的密鑰作為密碼。 人類喜歡任意長度的密碼。
為了支持人類,我們需要從人類密碼派生AES密鑰。 這比看起來要難,因此應該使用經(jīng)過充分研究并被認為是加密安全的方法之一。 這些方法之一是scrypt密鑰派生功能。
加密是一個棘手的主題,犯一個錯誤就會使攻擊者破壞加密并解密文件。
將人可讀的密碼轉(zhuǎn)換為隨機加密密鑰非常重要。
人傾向于只使用可能的字節(jié)子集作為密碼,這使得它們更容易破解。
Scrypt被認為是一種通過人工密碼生成加密密鑰的好算法。 可見,它還使用了一個鹽值,你應該對其保密。
AES算法有多種變體。 我們之所以選擇GCM,是因為它結(jié)合了身份驗證和加密功能。 身份驗證檢測加密數(shù)據(jù)的修改。
為了使加密更強,GCM模式需要額外的隨機字節(jié)。 我們選擇為每個文件生成唯一的隨機數(shù),并將其存儲在加密數(shù)據(jù)的開頭(隨機數(shù)不必是秘密的)。
一種替代方法是僅生成一個隨機數(shù)并將其用于所有文件。