十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
DES(Data Encryption Standard)是一種常見的分組加密算法,由IBM公司在1971年提出。它是一種對(duì)稱加密算法,也就是說它使用同一個(gè)密鑰來加密和解密數(shù)據(jù)。
創(chuàng)新互聯(lián)建站于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元巴里坤哈薩克做網(wǎng)站,已為上家服務(wù),為巴里坤哈薩克各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
DES使用一個(gè)56位的初始密鑰,但是這里提供的是一個(gè)64位的值,這是因?yàn)樵谟布?shí)現(xiàn)中每8位可以用于奇偶校驗(yàn)??梢酝ㄟ^設(shè)定8位字符串,由 crypto/des 庫的 des.NewCipher(key) 函數(shù)生成密鑰
DES分組的大小是64位,如果加密的數(shù)據(jù)長度不是64位的倍數(shù),可以按照某種具體的規(guī)則來填充位。常用的填充算法有 pkcs5 , zero 等
對(duì)稱加密有非常好的安全性,其加解密計(jì)算的性能也較高,但其有兩個(gè)重要缺點(diǎn):
在如今開放的信息社會(huì),秘鑰的管理愈加困難,非公開的秘鑰機(jī)制雖然破解較難,但還是有遭到攻擊的可能性,由于對(duì)稱加密需要加解密雙方共同握有私鑰,所有生成秘鑰的一方必須分發(fā)給另一方才能進(jìn)行安全通行,這就難免秘鑰在網(wǎng)絡(luò)中傳輸,網(wǎng)絡(luò)是不可靠的,其有可能被攔截或篡改。于是就產(chǎn)生了公開秘鑰體制,即服務(wù)方根據(jù)特定算法產(chǎn)生一對(duì)鑰匙串,自己持有私鑰小心保存,而公鑰公開分發(fā),在通信中,由公鑰加密進(jìn)行網(wǎng)絡(luò)傳輸,而傳輸?shù)男畔⒅荒苡伤借€解密,這就解決了秘鑰分發(fā)的問。公開秘鑰體制就是非對(duì)稱加密,非對(duì)稱加密一般有兩種用途:
如今的非對(duì)稱加密比較可靠的有RSA算法和ECC算法(橢圓曲線算法),RSA的受眾最多,但近年來隨著比特幣、區(qū)塊鏈的興起,ECC加密算法也越來越受到青睞。下面我們先介紹一下RSA加密算法的使用,ECC我們下一講展開。
公鑰密碼體系都是要基于一個(gè)困難問題來保證其安全性的,RSA是基于大數(shù)分解,將一個(gè)即使是計(jì)算機(jī)也無能為力的數(shù)學(xué)問題作為安全壁壘是現(xiàn)代密碼學(xué)的實(shí)現(xiàn)原理。講述這類數(shù)學(xué)問題需要龐雜的數(shù)論基礎(chǔ),此相關(guān)部分在此不再展開,感興趣的請(qǐng)出門右拐搜索歐幾里得證明、歐拉函數(shù)等數(shù)論部分知識(shí)。
Go標(biāo)準(zhǔn)庫中crypto/rsa包實(shí)現(xiàn)了RSA加解密算法,并通過crypto/x509包實(shí)現(xiàn)私鑰序列化為ASN.1的DER編碼字符串的方法,我們還使用編解碼包encoding/pem(實(shí)現(xiàn)了PEM數(shù)據(jù)編碼,該格式源自保密增強(qiáng)郵件協(xié)議,目前PEM編碼主要用于TLS密鑰和證書。)將公私鑰數(shù)據(jù)編碼為pem格式的證書文件。
使用以上加解密方法:
橢圓曲線密碼學(xué)(英語:Elliptic Curve Cryptography,縮寫:ECC)是一種基于橢圓曲線數(shù)學(xué)的公開密鑰加密算法。橢圓曲線在密碼學(xué)中的使用是在1985年由Neal Koblitz和Victor Miller分別獨(dú)立提出的。
ECC的主要優(yōu)勢是在某些情況下它比其他的算法(比如RSA加密算法)使用更小的密鑰并提供相當(dāng)?shù)幕蚋叩燃?jí)的安全。ECC的另一個(gè)優(yōu)勢是可以定義群之間的雙線性映射,基于Weil對(duì)或是Tate對(duì);雙線性映射已經(jīng)在密碼學(xué)中發(fā)現(xiàn)了大量的應(yīng)用,例如基于身份的加密。
不過一個(gè)缺點(diǎn)是加密和解密操作的實(shí)現(xiàn)比其他機(jī)制花費(fèi)的時(shí)間長。
AES算法基于排列和置換運(yùn)算。排列是對(duì)數(shù)據(jù)重新進(jìn)行安排,置換是將一個(gè)數(shù)據(jù)單元替換為另一個(gè)。AES 使用幾種不同的方法來執(zhí)行排列和置換運(yùn)算。 AES是一個(gè)迭代的、對(duì)稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,并且用 128 位(16字節(jié))分組加密和解密數(shù)據(jù)。與公共密鑰密碼使用密鑰對(duì)不同,對(duì)稱密鑰密碼使用相同的密鑰加密和解密數(shù)據(jù)。通過分組密碼返回的加密數(shù)據(jù)的位數(shù)與輸入數(shù)據(jù)相同。迭代加密使用一個(gè)循環(huán)結(jié)構(gòu),在該循環(huán)中重復(fù)置換和替換輸入數(shù)據(jù)。
加解密流程圖:
使用CBC模式+PKCS7 填充方式實(shí)現(xiàn)AES的加密和解密