1.data是要加密的數(shù)據(jù),如果是字符串則getBytes。publicKey是公鑰,privateKey是私鑰。自定義密鑰對(duì)測(cè)試

創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),甘南網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:甘南等地區(qū)。甘南做網(wǎng)站價(jià)格咨詢:18982081108
2.從文件中讀取公鑰
當(dāng)加密的數(shù)據(jù)過(guò)長(zhǎng)時(shí),會(huì)出現(xiàn)javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes的異常。rsa算法規(guī)定一次加密的數(shù)據(jù)不能超過(guò)生成密鑰對(duì)時(shí)的keyLength/8-11,keyLength一般是1024個(gè)字節(jié),則加密的數(shù)據(jù)不能超過(guò)117個(gè)字節(jié)
測(cè)試分段加密和解密
生成公鑰和私鑰后,用base64編碼
一、android加密的數(shù)據(jù)服務(wù)器上無(wú)法解密?
android的rsa加密方式是RSA/ECB/NoPadding,而標(biāo)準(zhǔn)jdk是RSA/ECB/PKCS1Padding,所以加密時(shí)要設(shè)置標(biāo)準(zhǔn)jdk的加密方式
二、base64編碼。因?yàn)椴煌脑O(shè)備對(duì)字符的處理方式不同,字符有可能處理出錯(cuò),不利于傳輸。所以先把數(shù)據(jù)做base64編碼,變成可見(jiàn)字符,減少出錯(cuò)
官方提供的base64類,Base64.encode編碼,Base64.decode解碼。用這個(gè)會(huì)有換行符,需要自定義
三、rsa是非對(duì)稱加密算法。依賴于大數(shù)計(jì)算,加密速度比des慢,通常只用于加密少量數(shù)據(jù)或密鑰
四、公鑰加密比私鑰加密塊,公鑰解密比私鑰解密慢。加密后的數(shù)據(jù)大概是加密前的1.5倍
密碼學(xué)的三大作用:加密(?Encryption)、認(rèn)證(Authentication),鑒定(Identification)
加密 :防止壞人獲取你的數(shù)據(jù)。?
鑒權(quán) :防止壞人假冒你的身份。
認(rèn)證 :防止壞人修改了你的數(shù)據(jù)而你卻并沒(méi)有發(fā)現(xiàn)。
1. URLEncode和URLDecoder 作用:URLEncode就是將URL中特殊部分進(jìn)行編碼。URLDecoder就是對(duì)特殊部分進(jìn)行解碼。
為什么URL要encode原因呢?
url轉(zhuǎn)義其實(shí)也只是為了符合url的規(guī)范而已。因?yàn)樵跇?biāo)準(zhǔn)的url規(guī)范中 中文和很多的字符 是不允許出現(xiàn)在url中的。
2. Base64編碼
為什么要進(jìn)行Base64編碼?
在計(jì)算機(jī)中任何數(shù)據(jù)都是按ascii碼存儲(chǔ)的,而ascii碼的128~255之間的值是不可見(jiàn)字符。而在網(wǎng)絡(luò)上交換數(shù)據(jù)時(shí),比如說(shuō)從A地傳到B地,往往要經(jīng)過(guò)多個(gè)路由設(shè)備,由于不同的設(shè)備對(duì)字符的處理方式有一些不同,這樣那些不可見(jiàn)字符就有可能被處理錯(cuò)誤,這是不利于傳輸?shù)摹K跃拖劝褦?shù)據(jù)先做一個(gè)Base64編碼,統(tǒng)統(tǒng)變成可見(jiàn)字符,這樣出錯(cuò)的可能性就大降低了。
應(yīng)用場(chǎng)景:主要是對(duì)于二進(jìn)制數(shù)據(jù)進(jìn)行編碼,(文件、圖片、加密后的二進(jìn)制數(shù)據(jù))
3. 消息認(rèn)證算法
要確保加密的消息不是別人偽造的,需要提供一個(gè)消息認(rèn)證碼(MAC,Message?authentication?code) 。?
消息認(rèn)證碼是帶密鑰的hash函數(shù),基于密鑰和hash函數(shù)(單向散列函數(shù))。
密鑰雙方事先約定,不能讓第三方知道。
消息發(fā)送者使用MAC算法計(jì)算出消息的MAC值,追加到消息后面一起發(fā)送給接收者。?
接收者收到消息后,用相同的MAC算法計(jì)算接收到消息MAC值,并與接收到的MAC值對(duì)比是否一樣。
消息認(rèn)證碼的作用:檢查某段消息的完整性,以及作身份驗(yàn)證。
防止重放 攻擊可以有 3 種方法:
序號(hào)
每條消息都增加一個(gè)遞增的序號(hào),并且在計(jì)算 MAC 值的時(shí)候把序號(hào)也包含在消息中。這樣攻擊者如果不破解消息認(rèn)證碼就無(wú)法計(jì)算出正確的 MAC 值。這個(gè)方法的弊端是每條消息都需要多記錄最后一個(gè)消息的序號(hào)。
時(shí)間戳
發(fā)送消息的時(shí)候包含當(dāng)前時(shí)間,如果收到的時(shí)間與當(dāng)前的不符,即便 MAC 值正確也認(rèn)為是錯(cuò)誤消息直接丟棄。這樣也可以防御重放攻擊。這個(gè)方法的弊端是,發(fā)送方和接收方的時(shí)鐘必須一致,考慮到消息的延遲,所以需要在時(shí)間上留下一定的緩沖余地。這個(gè)緩沖之間還是會(huì)造成重放攻擊的可趁之機(jī)。
nonce
在通信之前,接收者先向發(fā)送者發(fā)送一個(gè)一次性的隨機(jī)數(shù) nonce。發(fā)送者在消息中包含這個(gè) nonce 并計(jì)算 MAC 值。由于每次 nonce 都會(huì)變化,因此無(wú)法進(jìn)行重放攻擊。這個(gè)方法的缺點(diǎn)會(huì)導(dǎo)致通信的數(shù)據(jù)量增加。
4. 對(duì)稱加密算法
特點(diǎn):加解密只有一個(gè)密鑰。優(yōu)點(diǎn):速度快、效率高。缺點(diǎn):密鑰交換問(wèn)題。算法:AES(256字節(jié),主流)、DES(8字節(jié),淘汰)。
密鑰交換問(wèn)題如何解決,MAC同樣也有這個(gè)問(wèn)題,可以使用非對(duì)稱加密傳輸,或者私下約定,密鑰管理中心。
5. 非對(duì)稱加密
非對(duì)稱加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密(這個(gè)過(guò)程可以做數(shù)字簽名) 。 非對(duì)稱加密主要使用的是RSA算法。
特點(diǎn):公/私鑰機(jī)制。優(yōu)點(diǎn):只需要交換公鑰,安全。缺點(diǎn):加解密速度慢,特別是解密。算法:RSA。應(yīng)用:數(shù)字簽名。
數(shù)字簽名 :
簡(jiǎn)單解釋:
A:將明文進(jìn)行摘要運(yùn)算后得到摘要(消息完整性),再將摘要用A的私鑰加密(身份認(rèn)證),得到數(shù)字簽名,將密文和數(shù)字簽名一塊發(fā)給B。
B:收到A的消息后,先將密文用自己的私鑰解密,得到明文。將數(shù)字簽名用A的公鑰進(jìn)行解密后,得到正確的摘要(解密成功說(shuō)明A的身份被認(rèn)證了)。
數(shù)字證書(shū) :
6. Android端 AES+RSA結(jié)合實(shí)踐
基本流程
Android端
服務(wù)器端
基本上如下圖所示的流程:
經(jīng)常使用加密算法:DES、3DES、RC4、AES,RSA等;
對(duì)稱加密:des,3des,aes
非對(duì)稱加密:rsa
不可逆加密:md5
加密模式:ECB、CBC、CFB、OFB等;
填充模式:NoPadding、PKCS1Padding、PKCS5Padding、PKCS7Padding
1.概念:
Base64是一種用64個(gè)字符(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/)來(lái)表示二進(jìn)制數(shù)據(jù)的方法,只是一種編碼方式,所以不建議使用Base64來(lái)進(jìn)行加密數(shù)據(jù)。
2.由來(lái):
為什么會(huì)有Base64編碼呢?因?yàn)橛?jì)算機(jī)中數(shù)據(jù)是按ascii碼存儲(chǔ)的,而ascii碼的128~255之間的值是不可見(jiàn)字符。在網(wǎng)絡(luò)上交換數(shù)據(jù)時(shí),比如圖片二進(jìn)制流的每個(gè)字節(jié)不可能全部都是可見(jiàn)字符,所以就傳送不了。最好的方法就是在不改變傳統(tǒng)協(xié)議的情況下,做一種擴(kuò)展方案來(lái)支持二進(jìn)制文件的傳送,把不可打印的字符也能用可打印字符來(lái)表示,所以就先把數(shù)據(jù)先做一個(gè)Base64編碼,統(tǒng)統(tǒng)變成可見(jiàn)字符,降低錯(cuò)誤率。
3.示例:
加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經(jīng)常發(fā)送數(shù)據(jù)的場(chǎng)合。缺點(diǎn)是密鑰的傳輸比較麻煩。
1.DES
DES全稱為Data Encryption Standard,即數(shù)據(jù)加密標(biāo)準(zhǔn),是一種使用 密鑰加密 的塊算法。
DES算法把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位,密鑰事實(shí)上是56位參與DES運(yùn)算(第8、16、24、32、40、48、56、64位是校驗(yàn)位,使得每個(gè)密鑰都有奇數(shù)個(gè)1)分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。
2.3DES
3DES(或稱為T(mén)riple DES)是三重 數(shù)據(jù)加密算法 (TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。是DES向AES過(guò)渡的加密算法,它使用3條56位的密鑰對(duì)數(shù)據(jù)進(jìn)行三次加密。是DES的一個(gè)更安全的變形。它以DES為基本模塊,通過(guò)組合分組方法設(shè)計(jì)出分組加密算法。比起最初的DES,3DES更為安全。
3.AES
AES全稱Advanced Encryption Standard,即高級(jí)加密標(biāo)準(zhǔn),當(dāng)今最流行的對(duì)稱加密算法之一,是DES的替代者。支持三種長(zhǎng)度的密鑰:128位,192位,256位。
AES算法是把明文拆分成一個(gè)個(gè)獨(dú)立的明文塊,每一個(gè)明文塊長(zhǎng)128bit。這些明文塊經(jīng)過(guò)AES加密器的復(fù)雜處理,生成一個(gè)個(gè)獨(dú)立的密文塊,這些密文塊拼接在一起,就是最終的AES加密結(jié)果。
但是這里涉及到一個(gè)問(wèn)題:假如一段明文長(zhǎng)度是192bit,如果按每128bit一個(gè)明文塊來(lái)拆分的話,第二個(gè)明文塊只有64bit,不足128bit。這時(shí)候怎么辦呢?就需要對(duì)明文塊進(jìn)行填充(Padding):
AES的工作模式,體現(xiàn)在把明文塊加密成密文塊的處理過(guò)程中。
加密和解密用的密鑰是不同的,這種加密方式是用數(shù)學(xué)上的難解問(wèn)題構(gòu)造的,通常加密解密的速度比較慢,適合偶爾發(fā)送數(shù)據(jù)的場(chǎng)合。優(yōu)點(diǎn)是密鑰傳輸方便。
1.SHA
安全散列算法(英語(yǔ):Secure Hash Algorithm,縮寫(xiě)為SHA)是一個(gè)密碼散列函數(shù)家族,是FIPS所認(rèn)證的安全散列算法。能計(jì)算出一個(gè)數(shù)字消息所對(duì)應(yīng)到的,長(zhǎng)度固定的字符串(又稱消息摘要)的算法,且若輸入的消息不同,它們對(duì)應(yīng)到不同字符串的機(jī)率很高。
SHA分為SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512五種算法,后四者有時(shí)并稱為SHA-2。SHA-1在許多安全協(xié)定中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的雜湊函數(shù))的后繼者。但SHA-1的安全性如今被密碼學(xué)家嚴(yán)重質(zhì)疑;雖然至今尚未出現(xiàn)對(duì)SHA-2有效的攻擊,它的算法跟SHA-1基本上仍然相似;因此有些人開(kāi)始發(fā)展其他替代的雜湊算法。
2.RSA
RSA算法1978年出現(xiàn),是第一個(gè)既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法,易于理解和操作。
RSA基于一個(gè)數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開(kāi)作為加密密鑰,即公鑰,而兩個(gè)大素?cái)?shù)組合成私鑰。公鑰是可提供給任何人使用,私鑰則為自己所有,供解密之用。
3.MD5
MD5信息摘要算法 (英語(yǔ):MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值,用于確保信息傳輸完整一致。具有如下優(yōu)點(diǎn):
XOR:異或加密,既將某個(gè)字符或者數(shù)值 x 與一個(gè)數(shù)值 m 進(jìn)行異或運(yùn)算得到 y ,則再用 y 與 m 進(jìn)行異或運(yùn)算就可還原為 x。
使用場(chǎng)景:
(1)兩個(gè)變量的互換(不借助第三個(gè)變量);
(2)數(shù)據(jù)的簡(jiǎn)單加密解密。
des對(duì)稱加密,是一種比較傳統(tǒng)的加密方式,其加密運(yùn)算、解密運(yùn)算使用的是同樣的密鑰,信息的發(fā)送者和信息的接收者在進(jìn)行信息的傳輸與處理時(shí),必須共同持有該密碼(稱為對(duì)稱密碼),是一種對(duì)稱加密算法。
DES全稱Data Encryption Standard,是一種使用密匙加密的塊算法。現(xiàn)在認(rèn)為是一種不安全的加密算法,因?yàn)楝F(xiàn)在已經(jīng)有用窮舉法攻破DES密碼的報(bào)道了。盡管如此,該加密算法還是運(yùn)用非常普遍,是一種標(biāo)準(zhǔn)的加密算法。3DES是DES的加強(qiáng)版本。
DES 使用一個(gè) 56 位的密鑰以及附加的 8 位奇偶校驗(yàn)位,產(chǎn)生最大 64 位的分組大小。這是一個(gè)迭代的分組密碼,使用稱為 Feistel 的技術(shù),其中將加密的文本塊分成兩半。使用子密鑰對(duì)其中一半應(yīng)用循環(huán)功能,然后將輸出與另一半進(jìn)行“異或”運(yùn)算;接著交換這兩半,這一過(guò)程會(huì)繼續(xù)下去,但最后一個(gè)循環(huán)不交換。DES 使用 16 個(gè)循環(huán),使用異或,置換,代換,移位操作四種基本運(yùn)算。
分享標(biāo)題:android加密,Android加密
文章URL:http://chinadenli.net/article40/dsgsiho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、網(wǎng)站策劃、服務(wù)器托管、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)公司、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)