A. 十進制是怎麼算
十進制數的運算遵循:加法時:「逢十進一」;減法時:「借一當十」。十進制數中,數碼的位置不同,所表示的值就不相同。
式中,每個對應的數碼有一個系數1000,100,10,1與之相對應,這個系數就叫做權或位權。十進制數的位權一般表示為:10n-1
式中,10為十進制的進位基數;10的i次為第i位的權;n表示相對於小數點的位置,取整數;當n位於小數點的左邊時,依次取n=1、2、3……n。位於小數點的右邊時,依次取n=-1、-2、-3……
因此,634.27可以寫為:634.27=6×102+3×101+4×100+2×10-1+7×10-2
B. 數據加密方式總結
程序開發過程中一般會遇到客戶端與服務端進行數據通信,不可避免的會遇到數據安全問題。為了防止數據在網路傳輸中發生數據泄露,我們常常會用到數據加密。常規的數據加密方式主要有:對稱加密和非對稱加密。
對稱加密主要有3種加密方式:DES加密、3DES加密及AES加密
如上圖所述,對稱加密使用同一個秘鑰,先用秘鑰對需要傳輸的明文數據進行加密,已加密的密文數據經過網路傳輸後,數據接收方通過同一個秘鑰進行解密,將密文數據再轉化成明文數據,完成數據傳輸過程。
但DES加密演算法的安全性不夠好,DES 被證明是可以破解的,明文+密鑰=密文,這個公式只要知道任何兩個,就可以推導出第三個在已經知道明文和對應密文的情況下,通過窮舉和暴力破解是可以破解DES的。
顧名思義,3DES加密就是使用DES演算法加密解密3次,由於DES加密缺乏安全性,3DES加密3次後安全性大大提高,但損失了一定的速度性能,所以慢慢被更優異的AES加密演算法所取代,3DES演算法可以說是DES加密和AES加密中間的過度品。
AES加解密過程和DES加解密過程類似,AES標准支持可變分組長度,分組長度可設定為32 比特的任意倍數,最小值為128 比特,最大值為256 比特,安全性大大增加,加解密速度也還可以。
RSA的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積(這是公認的數學難題)。
同時由於RSA的私鑰不用在網路上傳輸,避免了秘鑰泄露,因此安全性能大大提高。
RSA加解密速度測試:
通過上表可以發現,RSA加密速度還比較快,但解密速度會隨著加密數據的大小慢很多,加密6KB大小的數據用時0秒,解密用時1秒還可以接受。但對1M左右的數據進行解密,花費了5分多鍾的時間,在實際開發過程中就會顯得很慢,所以RSA演算法一般用於加密數據量較小的應用場景。
C. rsa演算法原理
RSA演算法是最常用的非對稱加密演算法,它既能用於加密,也能用於數字簽名。RSA的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積。
我們可以通過一個簡單的例子來理解RSA的工作原理。為了便於計算。在以下實例中只選取小數值的素數p,q,以及e,假設用戶A需要將明文「key」通過RSA加密後傳遞給用戶B,過程如下:設計公私密鑰(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3與20互質)則e×d≡1 mod f(n),即3×d≡1 mod 20。通過試算我們找到,當d=7時,e×d≡1 mod f(n)同餘等式成立。因此,可令d=7。從而我們可以設計出一對公私密鑰,加密密鑰(公鑰)為:KU =(e,n)=(3,33),解密密鑰(私鑰)為:KR =(d,n)=(7,33)。
英文數字化。將明文信息數字化,並將每塊兩個數字分組。假定明文英文字母編碼表為按字母順序排列數值。則得到分組後的key的明文信息為:11,05,25。
明文加密。用戶加密密鑰(3,33) 將數字化明文分組信息加密成密文。由C≡Me(mod n)得:
C1(密文)≡M1(明文)^e (mod n) == 11≡11^3 mod 33 ;
C2(密文)≡M2(明文)^e (mod n) == 26≡05^3 mod 33;
C3(密文)≡M3(明文)^e (mod n) == 16≡25^3 mod 33;
所以密文為11.26.16。
密文解密。用戶B收到密文,若將其解密,只需要計算,即:
M1(明文)≡C1(密文)^d (mod n) == 11≡11^7 mod 33;
M2(明文)≡C2(密文)^d (mod n) == 05≡26^7 mod 33;
M3(明文)≡C3(密文)^d (mod n) == 25≡16^7 mod 33;
轉成明文11.05.25。根據上面的編碼表將其轉換為英文,我們又得到了恢復後的原文「key」。
當然,實際運用要比這復雜得多,由於RSA演算法的公鑰私鑰的長度(模長度)要到1024位甚至2048位才能保證安全,因此,p、q、e的選取、公鑰私鑰的生成,加密解密模指數運算都有一定的計算程序,需要仰仗計算機高速完成。
D. 密碼學基礎(三):非對稱加密(RSA演算法原理)
加密和解密使用的是兩個不同的秘鑰,這種演算法叫做非對稱加密。非對稱加密又稱為公鑰加密,RSA只是公鑰加密的一種。
現實生活中有簽名,互聯網中也存在簽名。簽名的作用有兩個,一個是身份驗證,一個是數據完整性驗證。數字簽名通過摘要演算法來確保接收到的數據沒有被篡改,再通過簽名者的私鑰加密,只能使用對應的公鑰解密,以此來保證身份的一致性。
數字證書是將個人信息和數字簽名放到一起,經由CA機構的私鑰加密之後生成。當然,不經過CA機構,由自己完成簽名的證書稱為自簽名證書。CA機構作為互聯網密碼體系中的基礎機構,擁有相當高級的安全防範能力,所有的證書體系中的基本假設或者前提就是CA機構的私鑰不被竊取,一旦 CA J機構出事,整個信息鏈將不再安全。
CA證書的生成過程如下:
證書參與信息傳遞完成加密和解密的過程如下:
互質關系:互質是公約數只有1的兩個整數,1和1互質,13和13就不互質了。
歐拉函數:表示任意給定正整數 n,在小於等於n的正整數之中,有多少個與 n 構成互質關系,其表達式為:
其中,若P為質數,則其表達式可以簡寫為:
情況一:φ(1)=1
1和任何數都互質,所以φ(1)=1;
情況二:n 是質數, φ(n)=n-1
因為 n 是質數,所以和小於自己的所有數都是互質關系,所以φ(n)=n-1;
情況三:如果 n 是質數的某一個次方,即 n = p^k ( p 為質數,k 為大於等於1的整數),則φ(n)=(p-1)p^(k-1)
因為 p 為質數,所以除了 p 的倍數之外,小於 n 的所有數都是 n 的質數;
情況四:如果 n 可以分解成兩個互質的整數之積,n = p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)
情況五:基於情況四,如果 p1 和 p2 都是質數,且 n=p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1)
而 RSA 演算法的基本原理就是歐拉函數中的第五種情況,即: φ(n)=(p1-1)(p2-1);
如果兩個正整數 a 和 n 互質,那麼一定可以找到整數 b,使得 ab-1 被 n 整除,或者說ab被n除的余數是1。這時,b就叫做a的「模反元素」。歐拉定理可以用來證明模反元素必然存在。
可以看到,a的 φ(n)-1 次方,就是a對模數n的模反元素。
n=p x q = 3233,3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。
在實際使用中,一般場景下選擇1024位長度的數字,更高安全要求的場景下,選擇2048位的數字,這里作為演示,選取p=61和q=53;
因為n、p、q都為質數,所以φ(n) = (p-1)(q-1)=60×52= 3120
注意,這里是和φ(n) 互互質而不是n!假設選擇的值是17,即 e=17;
模反元素就是指有一個整數 d,可以使得 ed 被 φ(n) 除的余數為1。表示為:(ed-1)=φ(n) y --> 17d=3120y+1,算出一組解為(2753,15),即 d=2753,y=-15,也就是(17 2753-1)/3120=15。
注意,這里不能選擇3119,否則公私鑰相同??
公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)
公鑰是公開的,也就是說m=p*q=3233是公開的,那麼怎麼求e被?e是通過模反函數求得,17d=3120y+1,e是公開的等於17,這時候想要求d就要知道3120,也就是φ(n),也就是φ(3233),說白了,3233是公開的,你能對3233進行因數分解,你就能知道d,也就能破解私鑰。
正常情況下,3233我們可以因數分解為61*53,但是對於很大的數字,人類只能通過枚舉的方法來因數分解,所以RSA安全性的本質就是:對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。
人類已經分解的最大整數是:
這個人類已經分解的最大整數為232個十進制位,768個二進制位,比它更大的因數分解,還沒有被報道過,因此目前被破解的最長RSA密鑰就是768位。所以實際使用中的1024位秘鑰基本安全,2048位秘鑰絕對安全。
網上有個段子:
已經得出公私鑰的組成:
公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)
加密的過程就是
解密過程如下:
其中 m 是要被加密的數字,c 是加密之後輸出的結果,且 m < n ,其中解密過程一定成立可以證明的,這里省略證明過程。
總而言之,RSA的加密就是使用模反函數對數字進行加密和求解過程,在實際使用中因為 m < n必須成立,所以就有兩種加密方法:
對稱加密存在雖然快速,但是存在致命的缺點就是秘鑰需要傳遞。非對稱加密雖然不需要傳遞秘鑰就可以完成加密和解密,但是其致命缺點是速度不夠快,不能用於高頻率,高容量的加密場景。所以才有了兩者的互補關系,在傳遞對稱加密的秘鑰時採用非對稱加密,完成秘鑰傳送之後採用對稱加密,如此就可以完美互補。
E. 24位的加密方式
24位的加密方法,
源碼是:shikele,
加密後是:jx/seaOV/Ddmz4x6qzEFfg==,
不管多長的密碼都是加密成24位。
F. 開發中常見的加密方式及應用
開發中常見的加密方式及應用
一、base64
簡述:Base64是網路上最常見的用於傳輸8Bit 位元組碼 的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進制數據的方法。所有的數據都能被編碼為並只用65個字元就能表示的文本文件。( 65字元:A~Z a~z 0~9 + / = )編碼後的數據~=編碼前數據的4/3,會大1/3左右(圖片轉化為base64格式會比原圖大一些)。
應用:Base64編碼是從二進制到字元的過程,可用於在 HTTP 環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的唯一 標識符 (一般為128-bit的UUID)編碼為一個字元串,用作HTTP 表單 和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制 數據編碼 為適合放在URL(包括隱藏 表單域 )中的形式。此時,採用Base64編碼具有不可讀性,需要解碼後才能閱讀。
命令行進行Base64編碼和解碼
編碼:base64 123.png -o 123.txt
解碼:base64 123.txt -o test.png -D Base64編碼的原理
原理:
1)將所有字元轉化為ASCII碼;
2)將ASCII碼轉化為8位二進制;
3)將二進制3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;
4)統一在6位二進制前補兩個0湊足8位;
5)將補0後的二進制轉為十進制;
6)從Base64編碼表獲取十進制對應的Base64編碼;
Base64編碼的說明:
a.轉換的時候,將三個byte的數據,先後放入一個24bit的緩沖區中,先來的byte占高位。
b.數據不足3byte的話,於緩沖區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇查表選擇對應的字元作為編碼後的輸出。
c.不斷進行,直到全部輸入數據轉換完成。
d.如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;
e.如果最後剩下一個輸入數據,編碼結果後加2個「=」;
f.如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。
二、HASH加密/單向散列函數
簡述:Hash演算法特別的地方在於它是一種單向演算法,用戶可以通過Hash演算法對目標信息生成一段特定長度(32個字元)的唯一的Hash值,卻不能通過這個Hash值重新獲得目標信息。對用相同數據,加密之後的密文相同。 常見的Hash演算法有MD5和SHA。由於加密結果固定,所以基本上原始的哈希加密已經不再安全,於是衍生出了加鹽的方式。加鹽:先對原始數據拼接固定的字元串再進行MD5加密。
特點:
1) 加密 後密文的長度是定長(32個字元的密文)的
2)如果明文不一樣,那麼散列後的結果一定不一樣
3)如果明文一樣,那麼加密後的密文一定一樣(對相同數據加密,加密後的密文一樣)
4)所有的加密演算法是公開的
5)不可以逆推反算(不能根據密文推算出明文),但是可以暴力 破解 ,碰撞監測
原理:MD5消息摘要演算法,屬Hash演算法一類。MD5演算法對輸入任意長度的消息進行運行,產生一個128位的消息摘要。
1)數據填充
對消息進行數據填充,使消息的長度對512取模得448,設消息長度為X,即滿足X mod 512=448。根據此公式得出需要填充的數據長度。
填充方法:在消息後面進行填充,填充第一位為1,其餘為0。
2)添加信息長度
在第一步結果之後再填充上原消息的長度,可用來進行的存儲長度為64位。如果消息長度大於264,則只使用其低64位的值,即(消息長度 對264取模)。
在此步驟進行完畢後,最終消息長度就是512的整數倍。
3)數據處理
准備需要用到的數據:
4個常數:A = 0x67452301, B = 0x0EFCDAB89, C = 0x98BADCFE, D = 0x10325476;
4個函數:F(X,Y,Z)=(X & Y) | ((~X) & Z);G(X,Y,Z)=(X & Z) | (Y & (~Z));H(X,Y,Z)=X ^ Y ^ Z;I(X,Y,Z)=Y ^ (X | (~Z));
把消息分以512位為一分組進行處理,每一個分組進行4輪變換,以上面所說4個常數為起始變數進行計算,重新輸出4個變數,以這4個變數再進行下一分組的運算,如果已經是最後一個分組,則這4個變數為最後的結果,即MD5值。
三、對稱加密
經典演算法:
1)DES數據加密標准
DES演算法的入口參數有三個:Key、Data、Mode。其中Key為8個位元組共64位,是DES演算法的工作密鑰;Data也為8個位元組64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。
DES演算法是這樣工作的:如Mode為加密,則用Key去把數據Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。在通信網路的兩端,雙方約定一致的Key,在通信的源點用Key對核心數據進行DES加密,然後以密碼形式在公共通信網(如電話網)中傳輸到通信網路的終點,數據到達目的地後,用同樣的Key對密碼數據進行解密,便再現了明碼形式的核心數據。這樣,便保證了核心數據(如PIN、MAC等)在公共通信網中傳輸的安全性和可靠性。
2)3DES使用3個密鑰,對消息進行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)
3)AES高級加密標准
如圖,加密/解密使用相同的密碼,並且是可逆的
四、非對稱加密
特點:
1)使用公鑰加密,使用私鑰解密
2)公鑰是公開的,私鑰保密
3)加密處理安全,但是性能極差
經典演算法RSA:
1)RSA原理
(1)求N,准備兩個質數p和q,N = p x q
(2)求L,L是p-1和q-1的最小公倍數。L = lcm(p-1,q-1)
(3)求E,E和L的最大公約數為1(E和L互質)
(4)求D,E x D mode L = 1
五、數字簽名
原理以及應用場景:
1)數字簽名的應用場景
需要嚴格驗證發送方身份信息情況
2)數字簽名原理
(1)客戶端處理
對"消息"進行HASH得到"消息摘要"
發送方使用自己的私鑰對"消息摘要"加密(數字簽名)
把數字簽名附著在"報文"的末尾一起發送給接收方
(2)服務端處理
對"消息" HASH得到"報文摘要"
使用公鑰對"數字簽名"解密
對結果進行匹配
六、數字證書
簡單說明:
證書和駕照很相似,裡面記有姓名、組織、地址等個人信息,以及屬於此人的公鑰,並有認證機構施加數字簽名,只要看到公鑰證書,我們就可以知道認證機構認證該公鑰的確屬於此人。
數字證書的內容:
1)公鑰
2)認證機構的數字簽名
證書的生成步驟:
1)生成私鑰openssl genrsa -out private.pem 1024
2)創建證書請求openssl req -new -key private.pem -out rsacert.csr
3)生成證書並簽名,有效期10年openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
4)將PEM格式文件轉換成DER格式openssl x509 -outform der -in rsacert.crt -out rsacert.der
5)導出P12文件openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
iOS開發中的注意點:
1)在iOS開發中,不能直接使用PEM格式的證書,因為其內部進行了Base64編碼,應該使用的是DER的證書,是二進制格式的;
2)OpenSSL默認生成的都是PEM格式的證書。
七、https
HTTPS和HTTP的區別:
超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證伺服器的身份,並為瀏覽器和伺服器之間的通信加密。
HTTPS和HTTP的區別主要為以下四點:
1)https協議需要到ca申請證書,一般免費證書很少,需要交費。
2)http是 超文本傳輸協議 ,信息是明文傳輸,https則是具有 安全性 的 ssl 加密傳輸協議。
3)http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。
4)http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的 網路協議 ,比http協議安全。
5)SSL:Secure Sockets Layer安全套接字層;用數據加密(Encryption)技術,可確保數據在網路上傳輸過程中不會被截取及竊聽。目前一般通用之規格為40 bit之安全標准,美國則已推出128 bit之更高安全標准,但限制出境。只要3.0版本以上之I.E.或Netscape 瀏覽器 即可支持SSL。目前版本為3.0。SSL協議位於TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層:SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密密鑰等。