江蘇公司響應(yīng)式網(wǎng)站建設(shè)報(bào)價(jià)網(wǎng)絡(luò)搜索優(yōu)化
目錄
一、安全性算法
二、基礎(chǔ)術(shù)語
三、對稱加密與非對稱加密
四、數(shù)字簽名
五、 哈希算法
六、哈希算法碰撞與溢出處理
?
一、安全性算法
安全性算法的必要性:
? 安全性算法的必要性是因?yàn)樵诂F(xiàn)代數(shù)字化社會中,我們經(jīng)常需要傳輸、存儲和處理敏感的數(shù)據(jù),如個(gè)人隱私信息、金融數(shù)據(jù)、商業(yè)機(jī)密等。這些數(shù)據(jù)如果未經(jīng)過適當(dāng)?shù)谋Wo(hù),可能會被惡意攻擊者獲取、篡改或?yàn)E用。
安全性算法遵循以下四個(gè)特性
-
保密性(Confidentiality):確保只有授權(quán)者才能訪問和查看數(shù)據(jù),對非授權(quán)人員保持?jǐn)?shù)據(jù)保密。
-
完整性(Integrity):確保數(shù)據(jù)在傳輸和存儲過程中沒有被篡改、損壞或破壞,保持?jǐn)?shù)據(jù)的完整性和一致性。
-
認(rèn)證性(Authentication):確認(rèn)數(shù)據(jù)的來源和真實(shí)性,確保數(shù)據(jù)發(fā)送者和接收者的身份是真實(shí)的,并且數(shù)據(jù)沒有被冒充或偽造。
-
不可否認(rèn)性(Non-Repudiation):確保數(shù)據(jù)的發(fā)送者不能否認(rèn)他/她發(fā)送過的數(shù)據(jù),防止他/她在后期否認(rèn)該數(shù)據(jù)的發(fā)送或者執(zhí)行。
二、基礎(chǔ)術(shù)語
概念 | 定義 |
---|---|
明文 | 未經(jīng)過加密處理的原始數(shù)據(jù)或信息。 |
密鑰 | 用來進(jìn)行加密和解密的一串字符或數(shù)字,只有持有相應(yīng)密鑰的人才能對加密數(shù)據(jù)進(jìn)行解密。 |
密文 | 加密明文后的數(shù)據(jù)或信息。 |
私鑰 | 用于非對稱加密算法的一種密鑰,只有私鑰持有者才能進(jìn)行解密。 |
公鑰 | 用于非對稱加密算法的一種密鑰,公鑰可以公開給任何人使用,但只有私鑰持有者才能進(jìn)行解密。 |
加密函數(shù) | 一種算法,將明文和密鑰作為輸入,生成密文作為輸出,實(shí)現(xiàn)對數(shù)據(jù)的保護(hù)。 |
解密函數(shù) | 一種算法,將密文和密鑰作為輸入,生成明文作為輸出,實(shí)現(xiàn)對加密數(shù)據(jù)的還原。 |
三、對稱加密與非對稱加密
1.對稱加密
????????對稱加密是一種加密技術(shù),使用相同的密鑰(也稱為對稱密鑰)進(jìn)行加密和解密。在對稱加密算法中,發(fā)送方使用密鑰將明文轉(zhuǎn)換為密文,接收方使用相同的密鑰將密文轉(zhuǎn)換回明文。
????????對稱加密的優(yōu)點(diǎn)是加密和解密速度快,適用于大量數(shù)據(jù)的加密和解密操作。常見的對稱加密算法有DES(數(shù)據(jù)加密標(biāo)準(zhǔn))、AES(高級加密標(biāo)準(zhǔn))等。
優(yōu)點(diǎn): 加密和解密速度快,適用于大量數(shù)據(jù)的加密和解密操作。常見的對稱加密算法有DES(數(shù)據(jù)加密標(biāo)準(zhǔn))、AES(高級加密標(biāo)準(zhǔn))等。然而,對稱加密存在一個(gè)問題,即如何安全地共享密鑰。如果密鑰在傳輸過程中被攻擊者獲取,那么加密的安全性就會被破壞。因此,在某些情況下,非對稱加密算法更常被用于密鑰的安全交換。
2.非對稱加密
????????非對稱加密是一種加密技術(shù),與對稱加密算法不同,它使用一對密鑰進(jìn)行加密和解密操作。這對密鑰包括公鑰(public key)和私鑰(private key)。公鑰可以公開給其他人使用,而私鑰則只能由密鑰的所有者保管,不公開給他人。
????????在非對稱加密中,發(fā)送方使用接收方的公鑰來加密數(shù)據(jù),而接收方則使用自己的私鑰來解密。相反,如果發(fā)送方要發(fā)送加密的信息給接收方,發(fā)送方可以使用自己的私鑰進(jìn)行簽名,接收方使用發(fā)送方的公鑰驗(yàn)證簽名的有效性。這種加密和解密操作過程使用不同的密鑰,因此被稱為“非對稱”。
常用非對稱加密RSA
優(yōu)點(diǎn): 可以實(shí)現(xiàn)加密和解密的分離,并且可以安全地共享公鑰。即使公鑰被其他人獲取,也無法通過公鑰推導(dǎo)出私鑰。常見的非對稱加密算法有RSA(由Rivest、Shamir和Adleman發(fā)明)和Elliptic Curve Cryptography(橢圓曲線加密)等。
四、數(shù)字簽名
1.數(shù)字簽名概念
????????數(shù)字簽名是一種用于驗(yàn)證數(shù)據(jù)完整性、身份認(rèn)證和防止數(shù)據(jù)篡改的加密技術(shù)。它常用于確保發(fā)送方的身份,以及確保數(shù)據(jù)在傳輸過程中沒有被篡改或偽造。
2.數(shù)字簽名工作方式
??????? 數(shù)字簽名的工作方式是以公鑰和哈希函數(shù)相互配合使用的,用戶A先將明文的M以哈希函數(shù)計(jì)算出哈希值H,再用自己的私鑰對哈希值H進(jìn)行加密,加密后的內(nèi)容和即為"數(shù)字簽名"。最后將明文與數(shù)字簽名一起發(fā)送給用戶B。由于這個(gè)數(shù)字簽名是由用戶A的私鑰進(jìn)行加密的,且該私鑰只有A才有,因此該數(shù)字簽名可以代表A的身份。
五、 哈希算法
1.哈希算法是通過哈希函數(shù)計(jì)算一個(gè)鍵值對應(yīng)的地址,進(jìn)而建立哈希表,并依靠哈希函數(shù)查找各個(gè)鍵值存放在哈希表中的地址。查找速度與數(shù)據(jù)的多少無關(guān),在沒有碰撞和數(shù)據(jù)溢出的情況下即可查找成功,該方法還有保密性高的特點(diǎn)。
常見的哈希算法有除留余數(shù)法,平方取中法,折疊法和數(shù)字分析法
1.除留余數(shù)法
最簡單的哈希函數(shù)是將數(shù)據(jù)除以一個(gè)某個(gè)常數(shù)后,取余數(shù)作為索引。
h(key) = key mod B
案例:在一個(gè)有13個(gè)位置的數(shù)組中,只是用7個(gè)地址,值分別是12,65,70,99,33,67,48。那么B就可以是13 。
案例代碼:
public class javaDemo {public static void main(String[] args) {Map<Integer,Integer> map = new HashMap<>();int data[] = new int[]{12,65,70,99,33,67,48};//初始化哈希表for (int i=0;i<13;i++){map.put(i,null);}//除留余數(shù)for (int temp:data) {map.put((temp%13),temp);}System.out.println(map);
//注意:改代碼只是展示除留余數(shù)法,碰撞問題將在后面進(jìn)行修改}
}
注意:B雖然可以自己定義,但是盡量選擇用質(zhì)數(shù)(除了1和自身外沒有其他正因數(shù)的數(shù))
2.平方取中法
?平方取中法和除留余數(shù)法相當(dāng)類似,就是先計(jì)算數(shù)據(jù)的平方,之后取中間的某段數(shù)字作為索引。
案例:
原始數(shù)據(jù):12,65,70,99,33,67,51
平方后:144,4225,9801,1089,4489,2601
再通過取百位數(shù)或者十位數(shù)作為鍵值,取值后如下。
14,22,90,80,08,48,60
將上述7個(gè)數(shù)字對應(yīng)原來的七個(gè)原始數(shù)據(jù)(12,65,70,99,33,67,51)
如果存放的空間為100地址空間
則正常進(jìn)行數(shù)據(jù)映射如
f(14) = 12
f(22) = 65
.....
如果存放的空間為10地址空間,則需要對取值后的數(shù)進(jìn)行壓縮10倍,即14/10 = 1,22/10=2...
f(1) = 12
f(2) = 65
........
3.折疊法
????????折疊法是將數(shù)據(jù)轉(zhuǎn)換為一串?dāng)?shù)字后,先將這串?dāng)?shù)字拆成及部分,再把他們加起來,就可以計(jì)算出這個(gè)鍵值的桶地址(Bucket Address),例如,有一個(gè)數(shù)據(jù)轉(zhuǎn)換成數(shù)字后為2365479125443.若以每四個(gè)數(shù)字為一個(gè)部分,則可以拆分成2365、4791、2544、3.將這4組數(shù)字加起來后即為索引值。
2365+4791+2544+3 = 9703 ->桶地址
??????? 在折疊法中有兩種做法。一種是向上例那樣直接將每一部分相加所得的值作為其桶地址,這種做法成為“移動折疊法”。哈希法的設(shè)計(jì)原則之一是降低碰撞,如果希望降低碰撞,就可以將上述的數(shù)字中的技術(shù)為段或偶數(shù)位段反轉(zhuǎn)后相加,以取得桶地址,這種改進(jìn)后的做法成為“邊界折疊法”
??????? 還是以上面的數(shù)字為例,請看下列說明
情況一:將偶數(shù)位段反轉(zhuǎn)
?? 2365(第一位的是奇數(shù)位,故不反轉(zhuǎn))
+1974(第二位的是偶數(shù)位,故要反轉(zhuǎn))
+ 2544(第三位的是奇數(shù)位,故不反轉(zhuǎn))
+ 3????? (第四位的是偶數(shù)位,故要反轉(zhuǎn))
= 6886 ->桶地址
情況二:將奇數(shù)位段反轉(zhuǎn)
?? 5632 (第一位的是奇數(shù)位,需要反轉(zhuǎn))
+ 4791(第二位的是偶數(shù)位,故不反轉(zhuǎn))
+ 4452(第三位的是奇數(shù)位,需要反轉(zhuǎn))
+ 3????????(第四位的是偶數(shù)位,故不反轉(zhuǎn))
= 14878 -> 桶地址
4.數(shù)字分析法
數(shù)字分析法,通過分析數(shù)據(jù),找取數(shù)據(jù)中數(shù)字重復(fù)率低的數(shù)字,將索引空間放在數(shù)據(jù)中重復(fù)率最低的位置,以此作為數(shù)據(jù)的索引。
六、哈希算法碰撞與溢出處理
碰撞與溢出
????????哈希算法將輸入數(shù)據(jù)映射到固定長度的哈希值。碰撞是指不同的輸入數(shù)據(jù)最終得到相同的哈希值,而溢出則是指較大的輸入數(shù)據(jù)映射到較小的輸出空間中。這些問題的出現(xiàn)是由于哈希算法必須處理無限輸入空間映射到有限輸出空間的情況導(dǎo)致的。雖然設(shè)計(jì)者會盡力減少碰撞和溢出的概率,但在某些情況下仍無法完全避免。
1.線性探測法
線性探測算法:
public class javaDemo {public static void main(String[] args) {//假設(shè)地址空間為10,并且初始值為-1int index[] = new int[10];int num;int temp = num % index.length;while (true){
// 如果目標(biāo)位置不存在數(shù)字則存入數(shù)據(jù)if (index[temp] == -1){index[temp] = num;break;}else {temp = (num+1) % index.length;}}}
}
?