① 有什麼好用的加密軟體可以對常用辦公文檔圖紙進行加密
有什麼好用的,加密軟體可以對常用辦公文檔途職進行加密
② android Okhttp/Retrofit網路請求加解密實現方案
比較安全的方案應該是AES+RSA的加密方式。具體如下圖所示。
為什麼要這樣做呢?
1、RSA是非對稱加密,公鑰和私鑰分開,且公鑰可以公開,很適合網路數據傳輸場景。但RSA加密比較慢,據說比AES慢100倍,且對加密的數據長度也有限制。
2、AES是對稱加密,加密速度快,安全性高,但密鑰的保存是個問題,在網路數據傳輸的場景就很容易由於密鑰泄露造成安全隱患
3、所以,AES+RSA結合才更好,AES加密數據,且密鑰隨機生成,RSA用對方(伺服器)的公鑰加密隨機生成的AES密鑰。傳輸時要把密文,加密的AES密鑰和自己的公鑰傳給對方(伺服器)。對方(伺服器)接到數據後,用自己的私鑰解密AES密鑰,再拿AES密鑰解密數據得到明文。這樣就綜合了兩種加密體系的優點。
4、除上面說的外,還可以加簽名,即對傳輸的數據(加密前)先做個哈希,然後用自己的RSA私鑰對哈希簽名(對方拿到自己的公鑰可以驗簽),這樣可以驗證傳輸內容有沒有被修改過。
就java來說,加密的輸入和輸出都是位元組數組類型的,也就是二進制數據,網路傳輸或本地保存都需要重新編碼為字元串。推薦使用Base64。Android 有自帶的Base64實現,flag要選Base64.NO_WRAP,不然末尾會有換行影響服務端解碼。
Android中Base64加密
總而言之,這些不同語言都有實現庫,調用即可,關鍵是參數要一致,具體還需要和後台聯調一下。
rsa加解密的內容超長的問題解決
現在說到網路框架,應該毫無疑問是Retrofit了。上面說的加密方案說到底還是要在網路請求框架內加上,怎麼做入侵最小,怎麼做最方便才是重點。
1、坑定不能直接在介面調用層做加密,加參數,這樣每個介面都要修改,這是不可能的。
2、ConverterFactory處理,這也是網上可以搜到的很多文章的寫法,但我覺得還是有入侵。而且有點麻煩。
3、OkHttp添加攔截器,這種方法入侵最小(可以說沒有),實現呢也非常優雅。
下面的實現,網上也找不到多少可以參考的文章,但不得不說,OkHttp的封裝和設計真的很好用,所見即所得。看下源碼,就知道該怎麼用了,連文檔都不用查。
主要注意點:
0、和介面無關的新加的數據放在請求頭里。
1、該close的要close,不然會內存泄漏。
2、新舊Request和Response要區分好,新的要替換舊的去傳遞或返回。
3、要對response.code()做處理,只有在和後台約定好的返回碼下才走解密的邏輯,具體看自己的需求,不一定都是200。
③ C# AES加密,現在需要在java(安卓)端進行解密和加密操作,怎麼寫
例如a+=b相當於a=a+b,,,,即把a+b的值再賦值給a
懂了嗎看
不懂聯系我
④ 求解釋這段安卓代碼中的AES加密流程
AES加密過程涉及到 4 種操作,分別是位元組替代、行移位、列混淆和輪密鑰加。
1.位元組替換:位元組代替的主要功能是通過S盒完成一個位元組到另外一個位元組的映射。
2.行移位:行移位的功能是實現一個4x4矩陣內部位元組之間的置換。
4.輪密鑰加:加密過程中,每輪的輸入與輪密鑰異或一次(當前分組和擴展密鑰的一部分進行按位異或);因為二進制數連續異或一個數結果是不變的,所以在解密時再異或上該輪的密鑰即可恢復輸入。
5.密鑰擴展:其復雜性是確保演算法安全性的重要部分。當分組長度和密鑰長度都是128位時,AES的加密演算法共迭代10輪,需要10個子密鑰。AES的密鑰擴展的目的是將輸入的128位密鑰擴展成11個128位的子密鑰。AES的密鑰擴展演算法是以字為一個基本單位(一個字為4個位元組),剛好是密鑰矩陣的一列。因此4個字(128位)密鑰需要擴展成11個子密鑰,共44個字。
⑤ 使用C/C++語言,將DES/AES加密演算法,用代碼實現
哎,學校大作業吧。核心是des和aes的演算法唄,自己一點點寫代碼量不很少呢。沒時間給你寫了。
不過有個很好的偷懶辦法:建議lz你去找一下OpenSSL的源碼。裡面有AES,DES的原生C實現。現成函數。lz你直接從裡面摳出來復制到你工程里就行了。。
⑥ 如何測試android存儲加密
Android系統中,判斷應用有無安裝有兩種方式: 1.根據包名判斷,以下為判斷代碼: public boolean checkApkExist(Context context, String packageName) { if (packageName == null || 「」.equals(packageName)) return false; try { ApplicationI
⑦ 安卓常見的一些加密((對稱加密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隻是一種哈希演算法