當前位置:首頁 » 密碼管理 » androidase加密

androidase加密

發布時間: 2023-01-11 17:23:16

⑴ Android使用RSA加密和解密

1.data是要加密的數據,如果是字元串則getBytes。publicKey是公鑰,privateKey是私鑰。自定義密鑰對測試

2.從文件中讀取公鑰

當加密的數據過長時,會出現javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes的異常。rsa演算法規定一次加密的數據不能超過生成密鑰對時的keyLength/8-11,keyLength一般是1024個位元組,則加密的數據不能超過117個位元組

測試分段加密和解密

生成公鑰和私鑰後,用base64編碼

一、android加密的數據伺服器上無法解密?
android的rsa加密方式是RSA/ECB/NoPadding,而標准jdk是RSA/ECB/PKCS1Padding,所以加密時要設置標准jdk的加密方式

二、base64編碼。因為不同的設備對字元的處理方式不同,字元有可能處理出錯,不利於傳輸。所以先把數據做base64編碼,變成可見字元,減少出錯
官方提供的base64類,Base64.encode編碼,Base64.decode解碼。用這個會有換行符,需要自定義

三、rsa是非對稱加密演算法。依賴於大數計算,加密速度比des慢,通常只用於加密少量數據或密鑰

四、公鑰加密比私鑰加密塊,公鑰解密比私鑰解密慢。加密後的數據大概是加密前的1.5倍

⑵ Android APP加密方法都有哪些

安卓APP加密的方法主要分成三類:源碼加密、數據安全和應用保護,而每一類又分成好幾個小項。
源碼加密包括:Dex文件保護、防二次打包、so文件保護、資源文件保護。以Dex文件保護為例,Dex文件保護又包括:高級混淆、DEX文件加殼、DEX文件加花、動態類載入、內存防mp。
高級混淆:代碼混淆,可以降低代碼可讀性、縮小包大小。
DEX文件加殼:相當於把源碼打包至其他文件夾下,逆向工具對加密後的dex文件解析,只能看到殼文件,可以防止解包後看到真正的源碼。愛加密利用挖空技術實現函數級加密,安全強度高,啟動效率快。
dex加花:由於大部分逆向工具都是線性讀取位元組碼並解析,當遇到無效位元組碼時就會引起反編譯工具位元組碼解析失敗。愛加密插入無效位元組碼到dex文件之中,同時保證該位元組碼永遠不會被執行,否則程序運行也會崩潰。這樣,就能起到反編譯的作用了。
dex動態類載入:愛加密加固後的dex文件源碼可以動態分離,在運行時,將源碼分段載入到內存當中。
內存防mp:程序運行時會釋放代碼,內存防mp可以防止程序運行時被劫持。
應用安全包括:log日誌輸入屏蔽、應用清場。清場技術依賴於雲端黑名單、白名單DB,應用每次啟動後便自動進行本地的黑名單、白名單DB數據更新,若檢測到有異常情況,則可對用戶進行提示。
數據安全包括:頁面防劫持、本地數據保護、截屏保護、內存數據防查詢、協議加密、虛擬鍵盤。

⑶ 求安卓加密,安卓應用加密方式

android是用java語言開發的,java語言,JDK給我們提供了非常多的加密演算法

如基本的單向加密演算法:

  1. BASE64 嚴格地說,屬於編碼格式,而非加密演算法

  2. MD5(Message Digest algorithm 5,信息摘要演算法)

  3. SHA(Secure Hash Algorithm,安全散列演算法)

  4. HMAC(Hash Message Authentication Code,散列消息鑒別碼)


復雜的對稱加密(DES、PBE)、非對稱加密演算法:

  1. DES(Data Encryption Standard,數據加密演算法)

  2. PBE(Password-based encryption,基於密碼驗證)

  3. RSA(演算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)DH(Diffie-Hellman演算法,密鑰一致協議)

  4. DSA(Digital Signature Algorithm,數字簽名)

  5. ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)


以下就是講解BASE64、MD5、SHA、HMAC幾種方法

MD5、SHA、HMAC這三種加密演算法,可謂是非可逆加密,就是不可解密的加密方法。我們通常只把他們作為加密的基礎。單純的以上三種的加密並不可靠。


一. BASE64
按 照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見於郵件、http加密,截取http信息,你就會發現登錄操作的用戶名、密碼欄位通過BASE64加密的。


二. MD5

MD5 -- message-digest algorithm 5 (信息-摘要演算法)縮寫,廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD5後都能生成唯一的MD5值。好比現在的ISO校驗,都 是MD5校驗。怎麼用?當然是把ISO經過MD5後產生MD5的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD5的串。就是用來驗證文 件是否一致的。


三. SHA

SHA(Secure Hash Algorithm,安全散列演算法),數字簽名等密碼學應用中重要的工具,被廣泛地應用於電子商務等信息安全領域。雖然,SHA與MD5通過碰撞法都被破解了, 但是SHA仍然是公認的安全加密演算法,較之MD5更為安全。


四. HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個 標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證 等。

⑷ android 常見的數據加密方式有哪些 是否可逆 用什麼加密數據

一、MD5加密演算法。 MD5是個不可逆的演算法 沒有解密的演算法。
二、DES加密。可逆。
三、RSA加密。可逆。

⑸ 我在android客戶端用AES加密了一個pdf文件(pdf文件是可以打開的),也解密了,但是這個解密文件打不開。

加密或解密的時候,少了幾個位元組

⑹ 問一下,給android加密哪些加密方式最好最有效

朋友你好,很高興為你解決問題。

android加密的最佳加密方式可採用安卓應用APK加密工具,一鍵集成DEX加密、SO文件加密、DLL文件加密、內存保護、反調試、防二次打包等功能。

可以有效避免核心代碼被破解,請求協議被偽造,被植入惡意代碼後重打包等諸多安全風 險!

有效五個杜絕:

• 杜絕APP包被植入病毒或廣 告,竊 取用戶隱 私信息,推送垃 圾廣 告;

• 維持應用原有的純凈度和企業信譽度。

• 杜絕競 爭對手逆向分析應用核心技術,竊 取企業勞動成果;

• 杜絕攻 擊者挖掘應用漏洞,發起惡意攻 擊行為。

• 杜絕應用廣 告代碼被刪除,影響經 濟收 益;

• 杜絕應用廣 告代碼被篡改,廣 告收 益被攻 擊者竊取。

希望以上解答能夠幫助到你,參考資料:http://www.kiwisec.com/proct/apkEncrypt.shtml。

祝:開心每一天。

⑺ 我用android2.2的aes加密,輸入的密鑰是128位,明文是128位,可是加密出來的密文怎麼有128*3位

要具體看加密過程有沒有操作失控。
比如補齊方式是不是導致增加。PKCS#5 #7都會有補齊
比如密文是不是經過BASE64或HEX轉過碼
變成abc12DEB==或FFBB12這種轉碼後的碼文,長度會相應增加一倍或1/3。
具體問題具體分析

⑻ Android在用AES加密字元串之後再用base64加密,加密的結果跟ios端不一樣,

之前在項目上用到AES256加密解密演算法,剛開始在java端加密解密都沒有問題,在iOS端加密解密也沒有問題。但是奇怪的是在java端加密後的文件在iOS端無法正確解密打開,然後簡單測試了一下,發現在java端和iOS端採用相同明文,相同密鑰加密後的密文不一樣!上網查了資料後發現iOS中AES加密演算法採用的填充是PKCS7Padding,而java不支持PKCS7Padding,只支持PKCS5Padding。我們知道加密演算法由演算法+模式+填充組成,所以這兩者不同的填充演算法導致相同明文相同密鑰加密後出現密文不一致的情況。那麼我們需要在java中用PKCS7Padding來填充,這樣就可以和iOS端填充演算法一致了。
要實現在java端用PKCS7Padding填充,需要用到bouncycastle組件來實現,下面我會提供該包的下載。啰嗦了一大堆,下面是一個簡單的測試,上代碼!
001 package com.encrypt.file;
002
003
004 import java.io.UnsupportedEncodingException;
005 importjava.security.Key;
006 import java.security.Security;
007
008 importjavax.crypto.Cipher;
009 importjavax.crypto.SecretKey;
010 importjavax.crypto.spec.SecretKeySpec;
011
012 public classAES256Encryption{
013
014 /**
015 * 密鑰演算法
016 * java6支持56位密鑰,bouncycastle支持64位
017 * */
018 public static finalString KEY_ALGORITHM="AES";
019
020 /**
021 * 加密/解密演算法/工作模式/填充方式
022 *
023 * JAVA6 支持PKCS5PADDING填充方式
024 * Bouncy castle支持PKCS7Padding填充方式
025 * */
026 public static finalString CIPHER_ALGORITHM="AES/ECB/PKCS7Padding";
027
028 /**
029 *
030 * 生成密鑰,java6隻支持56位密鑰,bouncycastle支持64位密鑰
031 * @return byte[] 二進制密鑰
032 * */
033 public static byte[] initkey() throwsException{
034
035 // //實例化密鑰生成器
036 // Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
037 // KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM, "BC");
038 // //初始化密鑰生成器,AES要求密鑰長度為128位、192位、256位
039 //// kg.init(256);
040 // kg.init(128);
041 // //生成密鑰
042 // SecretKey secretKey=kg.generateKey();
043 // //獲取二進制密鑰編碼形式
044 // return secretKey.getEncoded();
045 //為了便於測試,這里我把key寫死了,如果大家需要自動生成,可用上面注釋掉的代碼
046 return new byte[] { 0x08, 0x08, 0x04, 0x0b, 0x02, 0x0f, 0x0b, 0x0c,
047 0x01, 0x03, 0x09, 0x07, 0x0c, 0x03, 0x07, 0x0a, 0x04, 0x0f,
048 0x06, 0x0f, 0x0e, 0x09, 0x05, 0x01, 0x0a, 0x0a, 0x01, 0x09,
049 0x06, 0x07, 0x09, 0x0d };
050 }
051
052 /**
053 * 轉換密鑰
054 * @param key 二進制密鑰
055 * @return Key 密鑰
056 * */
057 public static Key toKey(byte[] key) throwsException{
058 //實例化DES密鑰
059 //生成密鑰
060 SecretKey secretKey=newSecretKeySpec(key,KEY_ALGORITHM);
061 returnsecretKey;
062 }
063
064 /**
065 * 加密數據
066 * @param data 待加密數據
067 * @param key 密鑰
068 * @return byte[] 加密後的數據
069 * */
070 public static byte[] encrypt(byte[] data,byte[] key) throwsException{
071 //還原密鑰
072 Key k=toKey(key);
073 /**
074 * 實例化
075 * 使用 PKCS7PADDING 填充方式,按如下方式實現,就是調用bouncycastle組件實現
076 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
077 */
078 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
079 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC");
080 //初始化,設置為加密模式
081 cipher.init(Cipher.ENCRYPT_MODE, k);
082 //執行操作
083 returncipher.doFinal(data);
084 }
085 /**
086 * 解密數據
087 * @param data 待解密數據
088 * @param key 密鑰
089 * @return byte[] 解密後的數據
090 * */
091 public static byte[] decrypt(byte[] data,byte[] key) throwsException{
092 //歡迎密鑰
093 Key k =toKey(key);
094 /**
095 * 實例化
096 * 使用 PKCS7PADDING 填充方式,按如下方式實現,就是調用bouncycastle組件實現
097 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
098 */
099 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
100 //初始化,設置為解密模式
101 cipher.init(Cipher.DECRYPT_MODE, k);
102 //執行操作
103 returncipher.doFinal(data);
104 }
105 /**
106 * @param args
107 * @throws UnsupportedEncodingException
108 * @throws Exception
109 */
110 public static void main(String[] args) {
111
112 String str="AES";
113 System.out.println("原文:"+str);
114
115 //初始化密鑰
116 byte[] key;
117 try {
118 key = AES256Encryption.initkey();
119 System.out.print("密鑰:");
120 for(int i = 0;i<key.length;i++){
121 System.out.printf("%x", key[i]);
122 }
123 System.out.print("\n");
124 //加密數據
125 byte[] data=AES256Encryption.encrypt(str.getBytes(), key);
126 System.out.print("加密後:");
127 for(int i = 0;i<data.length;i++){
128 System.out.printf("%x", data[i]);
129 }
130 System.out.print("\n");
131
132 //解密數據
133 data=AES256Encryption.decrypt(data, key);
134 System.out.println("解密後:"+newString(data));
135 } catch (Exception e) {
136 // TODO Auto-generated catch block
137 e.printStackTrace();
138 }
139
140 }
141 }
運行程序後的結果截圖:

ViewController.m文件

01 //
02 // ViewController.m
03 // AES256EncryptionDemo
04 //
05 // Created by 孫 裔 on 12-12-13.
06 // Copyright (c) 2012年 rich sun. All rights reserved.
07 //
08
09 #import "ViewController.h"
10 #import "EncryptAndDecrypt.h"
11
12 @interface ViewController ()
13
14 @end
15
16 @implementation ViewController
17 @synthesize plainTextField;
18 - (void)viewDidLoad
19 {
20 [super viewDidLoad];
21 // Do any additional setup after loading the view, typically from a nib.
22 }
23
24 - (void)didReceiveMemoryWarning
25 {
26 [super didReceiveMemoryWarning];
27 // Dispose of any resources that can be recreated.
28 }
29 //這個函數實現了用戶輸入完後點擊視圖背景,關閉鍵盤
30 - (IBAction)backgroundTap:(id)sender{
31 [plainTextField resignFirstResponder];
32 }
33
34 - (IBAction)encrypt:(id)sender {
35
36 NSString *plainText = plainTextField.text;//明文
37 NSData *plainTextData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
38
39 //為了測試,這里先把密鑰寫死
40 Byte keyByte[] = {0x08,0x08,0x04,0x0b,0x02,0x0f,0x0b,0x0c,0x01,0x03,0x09,0x07,0x0c,0x03,
41 0x07,0x0a,0x04,0x0f,0x06,0x0f,0x0e,0x09,0x05,0x01,0x0a,0x0a,0x01,0x09,
42 0x06,0x07,0x09,0x0d};
43 //byte轉換為NSData類型,以便下邊加密方法的調用
44 NSData *keyData = [[NSData alloc] initWithBytes:keyByte length:32];
45 //
46 NSData *cipherTextData = [plainTextData AES256EncryptWithKey:keyData];
47 Byte *plainTextByte = (Byte *)[cipherTextData bytes];
48 for(int i=0;i<[cipherTextData length];i++){
49 printf("%x",plainTextByte[i]);
50 }
51
52 }
53 @end

⑼ 如何在Android中用AES給zip文件加密解密

看看這個,應該有用http://blog.csdn.net/zjclugger/article/details/34838447

⑽ Android 的幾種加密方式

Android 中的最常用得到有三種加密方式:MD5,AES,RSA.

1.MD5

MD5本質是一種散列函數,用以提供消息的完整性保護。

特點:

1.壓縮性:任意長度的數據,算出的MD5值長度都是固定的;

2.容易計算:從原數據計算出MD5值很容易;

3.抗修改性:對原數據進行任何改動,哪怕只修改一個位元組,所得到的MD5值都有很大的區別

4.強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(及偽造數據)是非常困難的;

2.RSA加密

RSA加密演算法是一種非對稱加密演算法,非對稱加密演算法需要兩個密鑰:公共密鑰和私有密鑰。公鑰和私鑰是配對的,用公鑰加密的數據只有配對的私鑰才能解密。

RSA對加密數據的長度有限制,一般為密鑰的長度值-11,要加密較長的數據,可以採用數據截取的方法,分段加密。

3.AES加密

AES加密是一種高級加密的標准,是一種區塊加密標准。它是一個對稱密碼,就是說加密和解密用相同的密鑰。WPA/WPA2經常用的加密方式就是AES加密演算法。

熱點內容
存儲元數據伺服器是什麼 發布:2025-08-22 12:31:32 瀏覽:449
日本教編程 發布:2025-08-22 12:27:37 瀏覽:718
火影綱手ftp 發布:2025-08-22 12:25:46 瀏覽:805
linuxoracle創建表空間 發布:2025-08-22 12:09:31 瀏覽:298
多少訪問量 發布:2025-08-22 12:07:10 瀏覽:634
為什麼x79雙u伺服器主板漲價 發布:2025-08-22 11:57:22 瀏覽:516
c程序編譯緩慢 發布:2025-08-22 11:47:40 瀏覽:737
伺服器為什麼要加密碼 發布:2025-08-22 11:32:26 瀏覽:779
校園貸利息演算法 發布:2025-08-22 11:17:13 瀏覽:535
c編程進程 發布:2025-08-22 10:52:54 瀏覽:950