androidaes加密
『壹』 安卓常見的一些加密((對稱加密DES,AES),非對稱加密(RSA),MD5)
DES是一種對稱加密演算法,所謂對稱加密演算法即:加密和解密使用相同密鑰的演算法。DES加密演算法出自IBM的研究,
後來被美國政府正式採用,之後開始廣泛流傳,但是近些年使用越來越少,因為DES使用56位密鑰,以現代計算能力,
24小時內即可被破解
調用過程
最近做微信小程序獲取用戶綁定的手機號信息解密,試了很多方法。最終雖然沒有完全解決,但是也達到我的極限了。有時會報錯:javax.crypto.BadPaddingException: pad block corrupted。
出現錯誤的詳細描述
每次剛進入小程序登陸獲取手機號時,會出現第一次解密失敗,再試一次就成功的問題。如果連續登出,登入,就不會再出現揭秘失敗的問題。但是如果停止操作過一會,登出後登入,又會出現第一次揭秘失敗,再試一次就成功的問題。
網上說的,官方文檔上注意點我都排除了。獲取的加密密文是在前端調取wx.login()方法後,調用我後端的微信授權介面,獲取用戶的sessionkey,openId.然後才是前端調用的獲取sessionkey加密的用戶手機號介面,所以我可以保證每次sessionkey是最新的。不會過期。
並且我通過日誌發現在sessionkey不變的情況下,第一次失敗,第二次解密成功。
加密演算法,RSA是繞不開的話題,因為RSA演算法是目前最流行的公開密鑰演算法,既能用於加密,也能用戶數字簽名。不僅在加密貨幣領域使用,在傳統互聯網領域的應用也很廣泛。從被提出到現在20多年,經歷了各種考驗,被普遍認為是目前最優秀的公鑰方案之一
非對稱加密演算法的特點就是加密秘鑰和解密秘鑰不同,秘鑰分為公鑰和私鑰,用私鑰加密的明文,只能用公鑰解密;用公鑰加密的明文,只能用私鑰解密。
一、 什麼是「素數」?
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積
二、什麼是「互質數」(或「互素數」)?
小學數學教材對互質數是這樣定義的:「公約數只有1的兩個數,叫做互質數
(1)兩個質數一定是互質數。例如,2與7、13與19。
(2)一個質數如果不能整除另一個合數,這兩個數為互質數。例如,3與10、5與 26。
(3)1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。
(4)相鄰的兩個自然數是互質數。如 15與 16。
(5)相鄰的兩個奇數是互質數。如 49與 51。
(6)大數是質數的兩個數是互質數。如97與88。
(7)小數是質數,大數不是小數的倍數的兩個數是互質數。如 7和 16。
(8)兩個數都是合數(二數差又較大),小數所有的質因數,都不是大數的約數,這兩個數是互質數。如357與715,357=3×7×17,而3、7和17都不是715的約數,這兩個數為互質數。等等。
三、什麼是模指數運算?
指數運算誰都懂,不必說了,先說說模運算。模運算是整數運算,有一個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的余數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
模指數運算就是先做指數運算,取其結果再做模運算。如(5^3) mod 7 = (125 mod 7) = 6。
其中,符號^表示數學上的指數運算;mod表示模運算,即相除取余數。具體演算法步驟如下:
(1)選擇一對不同的、足夠大的素數p,q。
(2)計算n=p q。
(3)計算f(n)=(p-1) (q-1),同時對p, q嚴加保密,不讓任何人知道。
(4)找一個與f(n)互質的數e作為公鑰指數,且1<e<f(n)。
(5)計算私鑰指數d,使得d滿足(d*e) mod f(n) = 1
(6)公鑰KU=(e,n),私鑰KR=(d,n)。
(7)加密時,先將明文變換成0至n-1的一個整數M。若明文較長,可先分割成適當的組,然後再進行交換。設密文為C,則加密過程為:C=M^e mod n。
(8)解密過程為:M=C^d mod n。
在RSA密碼應用中,公鑰KU是被公開的,即e和n的數值可以被第三方竊聽者得到。破解RSA密碼的問題就是從已知的e和n的數值(n等於pq),想法求出d的數值,這樣就可以得到私鑰來破解密文。從上文中的公式:(d e) mod ((p-1) (q-1)) = 1,我們可以看出,密碼破解的實質問題是:從p q的數值,去求出(p-1)和(q-1)。換句話說,只要求出p和q的值,我們就能求出d的值而得到私鑰。
當p和q是一個大素數的時候,從它們的積p q去分解因子p和q,這是一個公認的數學難題。比如當p*q大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。因此,RSA從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。
缺點1:雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。
在android 開發的很多時候。為了保證用戶的賬戶的安全性,再保存用戶的密碼時,通常會採用MD5加密演算法,這種演算法是不可逆的,具有一定的安全性
MD5不是加密演算法, 因為如果目的是加密,必須滿足的一個條件是加密過後可以解密。但是MD5是無法從結果還原出原始數據的。
MD5隻是一種哈希演算法
『貳』 AES加密 在PC上和Android上不一樣 怎麼解決
你沒有指定RNG的Provider
未指定的情況下 Android 2.3以上版本使用的是 隨機數序列是 Android's OpenSSL-backed security provider
以下版本是 BouncyCastle Security Provider
JDK 1.7內沒有這個Provider, 這個Android自己搞的,你服務端一定解不出來的。
目前Android支持的 RNG有以下幾種
Android's OpenSSL-backed security provider 1ASN.1, DER, PkiPath, PKCS7
BouncyCastle Security Provider v1.49 HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature) Harmony JSSE Provider Android KeyStore security provider
服務端如果也沒指定的話,默認使用的是
SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)
Oracle JDK 1.7 環境下 支持以下
SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)
Sun RSA signature provider
Sun Elliptic Curve provider (EC, ECDSA, ECDH)
Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)
SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)
Sun (Kerberos v5, SPNEGO)
Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, NTLM)
XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory)
Sun PC/SC provider
Sun's Microsoft Crypto API provider
你們服務端要是用的 什麼 OPENJDK 第三方虛擬機,php什麼的話,那就只有天知道支不支持了。
不過你看也知道了 JDK里的都是SUN自己搞的, Android JVM里掛載的不是Android專用的就是第三方開源的,我估計你是找不到一樣的 隨機數生成器 方案了
『叄』 為什麼windows下aes解密android上的加密文件失敗
1.程序加密可結合AES演算法,在程序運行中,通過外部晶元中的AES密鑰,加密數據來驗證雙方的正確性,稱之為對比認證。2.加密數據傳輸過程中,可通過AES加密後形成密文傳輸,到達安全端後再進行解密,實現數據傳輸安全控制。3.綜合1和2,當前高大上的方式是程序加密可進行移植到加密晶元,存儲在加密晶元中,運行也在加密晶元內部運行,輸入數據參數,返回執行結果,同時輔助以AES加密和認證,實現數據程序的全方位防護
『肆』 Android-AES加解密
AES 是比利時密碼學家Joan Daemen和Vincent Rijmen所設計的一種加密演算法,又稱為 Rijndael 加密法。由美國國家標准與技術研究院(NIST)經過許多演算法的篩選,高級加密標准(Advanced Encryption Standard)在2001年11月26日發布於FIPS PUB 197,並在2002年5月26日成為有效的標准,在全世界被廣泛使用。
AES 是一種對稱加密演算法,即使用秘鑰加密數據以後,要使用相同的秘鑰才能解密。AES 加密方式比 DES 加密更安全,但是速度比不上 DES,但在不同運行環境下能保持良好的性能。
AES 共有 5 種加密模式:
其中 ECB、CBC、CTR 為塊加密模式,CFB、OFB 為流加密模式。
AES 五種加密模式: https://www.cnblogs.com/starwolf/p/3365834.html
『伍』 AES的INCI名稱
Aes是加密文件的名稱,它的inci名稱是查不到的。
下面小編就為大家詳細的介紹一下aes的內容。在Android開發過程中,我們經常會使用到加密相關的演算法。在很久以前,加密演算法使用得比較頻繁的是DES,後來出現了更加強悍的加密演算法—AES。這也是我們現在用得比較廣泛的加密演算法。AES高級加密標准,在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標准。這個標准用來替代原先的DES,已經被多方分析且廣為全世界所使用。AES是一種對稱性加密方式。一般我們在為了保證某些數據傳輸的安全性時,會使用到AES加密。而我們比較熟悉的是登錄電子郵箱、網站等需要使用密碼登錄,這個密碼實際上是口令,是用於驗證用戶身份的,密碼學上的「密碼」是指按照一定規則編成,對通信雙方的信息進行明密文變換的符號。以上就是本期內容了,希望對你有所幫助。
『陸』 android 中如何用AES演算法加密解密zip文件,我的程序可以加密文本,但是zip格式的文件不行
可能是I/O流的文件格式問題,至於怎麼做,還真沒去嘗試過。 一般zip是自帶加密方式的,壓縮文件是可以使用java程序加密的,你還是自己找找吧,我不會,我只看過AES加密方法 ,O(∩_∩)O~
『柒』 為什麼windows下aes解密android上的加密文件失敗
你的Cipher生成好像缺了很多步聚,而且如果只需要加/解密,用CipherInputStream和CipherOutputStream應該更方便。
我把你的代碼完整改了一下(幾乎面目全非)。已包含加密和解密的方法,一套即用。除了Cipher生成那方法比較難明外,其他部份都很簡單,相信你一看就明。