事件:有消息稱某網(wǎng)站超12G數(shù)據(jù)疑似外泄,涉及數(shù)千萬用戶。
那我們應(yīng)該如何考慮數(shù)據(jù)的安全存儲(chǔ)?
讓我們一起來聊聊數(shù)據(jù)的加密技術(shù)。
1、SHA加密
安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標(biāo)準(zhǔn)(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)。該算法經(jīng)過加密專家多年來的發(fā)展和改進(jìn)已日益完善,并被廣泛使用。
安全散列算法SHA是美國國家標(biāo)準(zhǔn)技術(shù)研究所發(fā)布的國家標(biāo)準(zhǔn)FIPS PUB 180,最新的標(biāo)準(zhǔn)已經(jīng)于2008年更新到FIPS PUB 180-3。其中規(guī)定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512這幾種單向散列算法。
單向散列函數(shù)一般用于產(chǎn)生消息摘要,密鑰加密等,常見的有:
l MD5(Message Digest Algorithm 5):是RSA數(shù)據(jù)安全公司開發(fā)的一種單向散列算法。
l SHA(Secure Hash Algorithm):可以對(duì)任意長度的數(shù)據(jù)運(yùn)算生成一個(gè)160位的數(shù)值;
2、Base64
Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,Base64編碼可用于在HTTP環(huán)境下傳遞較長的標(biāo)識(shí)信息。例如,在Java Persistence系統(tǒng)hibernate中,就采用了Base64來將一個(gè)較長的唯一標(biāo)識(shí)符(一般為128-bit的UUID)編碼為一個(gè)字符串,用作HTTP表單和HTTP GET URL中的參數(shù)。
然而,標(biāo)準(zhǔn)的Base64并不適合直接放在URL里傳輸,因?yàn)閁RL編碼器會(huì)把標(biāo)準(zhǔn)Base64中的“/”和“+”字符變?yōu)樾稳纭?XX”的形式,而這些“%”號(hào)在存入數(shù)據(jù)庫時(shí)還需要再進(jìn)行轉(zhuǎn)換,因?yàn)锳NSI SQL中已將“%”號(hào)用作通配符。
為解決此問題,可采用一種用于URL的改進(jìn)Base64編碼,它不僅在末尾填充'='號(hào),并將標(biāo)準(zhǔn)Base64中的“+”和“/”分別改成了“-”和“_”,這樣就免去了在URL編解碼和數(shù)據(jù)庫存儲(chǔ)時(shí)所要作的轉(zhuǎn)換,避免了編碼信息長度在此過程中的增加,并統(tǒng)一了數(shù)據(jù)庫、表單等處對(duì)象標(biāo)識(shí)符的格式。
3、Base64Encoder
一直以來Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder類。這人個(gè)類是sun公司的內(nèi)部方法,并沒有在java api中公開過,不屬于JDK標(biāo)準(zhǔn)庫范疇,但在JDK中包含了該類,可以直接使用。
4、RSA
RSA公鑰加密算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,當(dāng)時(shí)他們?nèi)硕荚诼槭±砉W(xué)院工作。RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的。
RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。
今天只有短的RSA鑰匙才可能被強(qiáng)力方式解破。到2008年為止,世界上還沒有任何可靠的攻擊RSA算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息實(shí)際上是不能被解破的。但在分布式計(jì)算和量子計(jì)算機(jī)理論日趨成熟的今天,RSA加密安全性受到了挑戰(zhàn)。
缺點(diǎn)
1)產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。
2)安全性,RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià),而且密碼學(xué)界多數(shù)人士傾向于因子分解不是NP問題。
3)速度太慢,由于RSA 的分組長度太大,為保證安全性,n 至少也要 600 bits以上,使運(yùn)算代價(jià)很高,尤其是速度較慢,較對(duì)稱密碼算法慢幾個(gè)數(shù)量級(jí);且隨著大數(shù)分解技術(shù)的發(fā)展,這個(gè)長度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。
5、AES對(duì)稱加密
加密技術(shù)可以分為對(duì)稱與非對(duì)稱兩種.
對(duì)稱加密,解密,即加密與解密用的是同一把秘鑰,常用的對(duì)稱加密技術(shù)有DES,AES等
而非對(duì)稱技術(shù),加密與解密用的是不同的秘鑰,常用的非對(duì)稱加密技術(shù)有RSA等