當前位置:首頁 » 安卓系統 » androidbase64解碼

androidbase64解碼

發布時間: 2023-02-22 16:11:32

java的base64在安卓解碼不了,怎麼回事

估計是代碼的問題,示例如下:
Android端:編碼:
String oneBaseEncoder = Base64.encode(msg.getBytes());
解碼:
String oneBaseDecoder = new String(Base64.decode(msg));
JAVA WEB端:編碼:
String oneBaseEncoder = new BASE64Encoder().encode(jsonString.getBytes("utf-8"));
解碼:
String oneBaseDecoder = new String(new BASE64Decoder().decodeBuffer(jsonString));

Ⅱ 安卓開發中怎麼將文件轉換成base64字元串

將文件轉成base64 字元串,android 手機開發的時候會用到,當然在android有轉base64的方法,這里調用的是jdk的api
[代碼] [Java]代碼
01 package com.xbl.test;
02
03 import java.io.File;
04 import java.io.FileInputStream;
05 import java.io.FileOutputStream;
06
07 import sun.misc.BASE64Decoder;
08 import sun.misc.BASE64Encoder;
09
10 public class File2Code {
11
12 /**
13 * <p>將文件轉成base64 字元串</p>
14 * @param path 文件路徑
15 * @return
16 * @throws Exception
17 */
18 public static String encodeBase64File(String path) throwsException {
19 File file = new File(path);
20 FileInputStream inputFile = new FileInputStream(file);
21 byte[] buffer = new byte[(int)file.length()];
22 inputFile.read(buffer);
23 inputFile.close();
24 return new BASE64Encoder().encode(buffer);
25 }
26 /**
27 * <p>將base64字元解碼保存文件</p>
28 * @param base64Code
29 * @param targetPath
30 * @throws Exception
31 */
32 public static void decoderBase64File(String base64Code,String targetPath) throws Exception {
33 byte[] buffer = new BASE64Decoder().decodeBuffer(base64Code);
34 FileOutputStream out = new FileOutputStream(targetPath);
35 out.write(buffer);
36 out.close();
37 }
38 /**
39 * <p>將base64字元保存文本文件</p>
40 * @param base64Code
41 * @param targetPath
42 * @throws Exception
43 */
44 public static void toFile(String base64Code,String targetPath)throws Exception {
45 byte[] buffer = base64Code.getBytes();
46 FileOutputStream out = new FileOutputStream(targetPath);
47 out.write(buffer);
48 out.close();
49 }
50 public static void main(String[] args) {
51 try {
52 String base64Code =encodeBase64File("D:\\1.jpg");
53 System.out.println(base64Code);
54 decoderBase64File(base64Code, "D:\\2.jpg");
55 toFile(base64Code, "D:\\three.txt");
56 } catch (Exception e) {
57 e.printStackTrace();
58 }
59 }
60
61 }

Ⅲ base64編解碼與hash加密

利用base64可以將二進制數據編碼為64個字元組成的字元串,64個字元為a-z,A-Z,0-9,+,/。base64編碼是將三個位元組的二進制數據編碼為四個位元組的字元數據,如果位元組數不為3的倍數base64會將 \x00 補在末尾,所以會常在base64字元串的末尾見到一個或者兩個的 = 號。
base64編碼

base64解碼

小技巧:遇到base64編碼的二進制文件可以直接解碼用io位元組流接收再用其他模塊載入,無需在本地保存文件再使用其他模塊載入。

哈希加密是對字元串進行加密,其加密後的散列值不可逆,即hash加密是單向加密不可解。python內置的hashlib庫提供了md5, SHA1, SHA224, SHA256, SHA384, SHA512 加密演算法的支持

Ⅳ 安卓能不能實現將base64轉成jpg格式放在設備本地

不能,轉成jpg格式只能在電腦或者平板上進行;
base64
Base64是網路上最常見的用於傳輸8Bit位元組代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規范。Base64編碼可用於在HTTP環境下傳遞較長的標識信息。

Ⅳ Android base64string轉bitmap

"data:image/jpeg;base64,/9j/4........H/k/wD/2Q==" 是後台傳的圖片資源,安卓的

/**

* base64轉為bitmap

*

* @param base64Data

* @return

*/

public static Bitmap base64ToBitmap(String base64Data) {

    byte[] bytes = android.util.Base64.decode(base64Data, android.util.Base64.DEFAULT);

    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

}

方法轉圖片的時候需要去掉頭部的「data:image/jpeg;base64,」再調用這個方法,網上的在線base64轉圖片就可以不去掉這個頭部也能成功。

head_iv.setImageBitmap(Tools.base64ToBitmap(img.split(",")[1]));

Ⅵ 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。

Ⅶ android Base64.decode 報錯

android 解碼 Base64 圖片數據時報錯

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/AxNDQ0Hyc5PTgyPC4zNDL/IyMjIyMjIyMjIyMjIyMjL/wAARCAK2AyADASIAAhEBAxEB//8

Base64.decode(data, Base64.DEFAULT)

經過測試把開頭的 data:image/jpeg;base64, 去掉就好了

Ⅷ 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 根據文件路徑base64字元串和文件互相轉換

android 本地存文件,通過base64轉碼文件存儲到本地

2.Base64字元串轉文件
先通過BASE64Decoder 將base64字元串解碼轉為位元組數組,在通過位元組流將位元組數組寫入文件中,通過bytes.length 屬性可查看base64字元串轉位元組是否有缺失,比對文件大小查看是否一樣

3.將文件轉為Base64字元串
這個沒什麼可說的,跟上面的流程相反,通過位元組流讀文件,然後將讀出的位元組數組通過BASE64Encoder 編碼

Ⅹ android,java 通用的加密解密方式有幾種

移動端越來越火了,我們在開發過程中,總會碰到要和移動端打交道的場景,比如.NET和android或者iOS的打交道。為了讓數據交互更安全,我們需要對數據進行加密傳輸。今天研究了一下,把幾種語言的加密都實踐了一遍,實現了.NET,java(android),iOS都同一套的加密演算法,下面就分享給大家。
AES加密有多種演算法模式,下面提供兩套模式的可用源碼。
加密方式:
先將文本AES加密
返回Base64轉碼
解密方式:
將數據進行Base64解碼
進行AES解密
一、CBC(Cipher Block Chaining,加密塊鏈)模式
是一種循環模式,前一個分組的密文和當前分組的明文異或操作後再加密,這樣做的目的是增強破解難度.
密鑰
密鑰偏移量
java/adroid加密AESOperator類:

package com.bci.wx.base.util;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
* AES 是一種可逆加密演算法,對用戶的敏感信息加密處理 對原始數據進行AES加密後,在進行Base64編碼轉化;
*/
public class AESOperator {

/*
* 加密用的Key 可以用26個字母和數字組成 此處使用AES-128-CBC加密模式,key需要為16位。
*/
private String sKey = "smkldospdosldaaa";//key,可自行修改
private String ivParameter = "0392039203920300";//偏移量,可自行修改
private static AESOperator instance = null;

private AESOperator() {

}

public static AESOperator getInstance() {
if (instance == null)
instance = new AESOperator();
return instance;
}

public static String Encrypt(String encData ,String secretKey,String vector) throws Exception {

if(secretKey == null) {
return null;
}
if(secretKey.length() != 16) {
return null;
}
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = secretKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(vector.getBytes());// 使用CBC模式,需要一個向量iv,可增加加密演算法的強度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(encData.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此處使用BASE64做轉碼。
}

// 加密
public String encrypt(String sSrc) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一個向量iv,可增加加密演算法的強度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此處使用BASE64做轉碼。
}

// 解密
public String decrypt(String sSrc) throws Exception {
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}

public String decrypt(String sSrc,String key,String ivs) throws Exception {
try {
byte[] raw = key.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivs.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
return null;
}
}

public static String encodeBytes(byte[] bytes) {
StringBuffer strBuf = new StringBuffer();

for (int i = 0; i < bytes.length; i++) {
strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int) 'a')));
strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a')));
}

return strBuf.toString();
}

熱點內容
openfoam源碼 發布:2025-07-10 21:49:21 瀏覽:999
安卓手機如何打開fx文件 發布:2025-07-10 21:49:09 瀏覽:238
安卓唱吧怎麼錄mv 發布:2025-07-10 21:47:19 瀏覽:603
ftp傳輸的儲存位置 發布:2025-07-10 21:46:39 瀏覽:246
伺服器怎麼封某一個地區的ip 發布:2025-07-10 21:44:57 瀏覽:938
androidxmpp推送 發布:2025-07-10 21:40:32 瀏覽:738
bat腳本字元串 發布:2025-07-10 21:19:49 瀏覽:172
像素工廠手機伺服器地址 發布:2025-07-10 21:18:12 瀏覽:750
怎麼查看伺服器ip跟密碼是多少 發布:2025-07-10 21:12:29 瀏覽:21
sqlserver讀寫分離 發布:2025-07-10 21:12:27 瀏覽:376