㈠ 關於java中BASE64解碼演算法
讓我們再來看一個實際的例子,加深印象!
轉換前 10101101 10111010 01110110
轉換後 00101011 00011011 00101001 00110110
十進制 43 27 41 54
對應碼表中的版值 r b p 2
將第一個字元右移權2位得00101011, 得第一個目標字元00101011
將第一個字元左移4位得11010000,第二個字元右移4位的00001011相加得第二個目標字元11011011
將第二個字元左移2位得11101000,第三個字元右移6位的00000001相加的第三個目標字元11101001
第四個目標字元就是01110110
然後讓各個目標字元與0x3F進行and位操作,讓最高的兩位為零。
㈡ java:關於base64編碼求解
首先base64是對位元組碼進行再次編碼,所以要先把你這個字元轉成二進行碼(不過對於英文字母來說,轉成的二進制碼都是一樣的,就沒關系了)。'a'對應的二進制碼為01000001(65),而base64是每6位編成一個字元(base64字元),則把此二進制碼分成2段,第一段是010000,第二段是01(0000不足位補0),這兩個不是一樣的嗎,值為16,對應第17個大寫字母(0對應A),那自然是兩個Q了,而base64編碼至少編出4個字元(因為給3個字元來編碼,一個6位,3個24位,6位一編碼,正好編出4個,反過來自然是4個解碼成3個)。另外這個編碼過程本來就是它的原理,原理圖如下,只要明白了原理才知道倒底怎麼編。
㈢ 在Java中如何進行BASE64編碼和解碼
如果是單純只想用復的話,導這制個包進你的項目snakeyaml-1.17.jar,
裡面有個類可以直接用
org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder
例如:
String needToEncode = "你想編碼的字元串";
String encoded = Base64Coder.encodeString(needToEncode);
// 控制台輸出:
String decoded = Base64Coder.decodeString(encoded );
// 控制台輸出:你想編碼的字元串
Base64Coder這個類還提供了別的方法,可以自己看一下。
僅供參考。
㈣ java中如何用base64解碼圖片,並返回圖片,不保存。
給你發個我以前的工具類吧、
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class ImageChange {
/**
* 從path這個地址獲取一張圖片然後轉為base64碼
* @param imgName 圖片的名字 如:123.gif(是帶後綴的)
* @param path 123.gif圖片存放的路徑
* @return
* @throws Exception
*/
public static String getImageFromServer(String imgName,String path)throws Exception{
BASE64Encoder encoder = new sun.misc.BASE64Encoder();
File f = new File(path+imgName);
if(!f.exists()){
f.createNewFile();
}
BufferedImage bi = ImageIO.read(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "gif", baos);
byte[] bytes = baos.toByteArray();
return encoder.encodeBuffer(bytes).trim();
}
/**
* 將一個base64轉換成圖片保存在 path 文件夾下 名為imgName.gif
* @param base64String
* @param path 是一個文件夾路徑
* @param imgName 圖片名字(沒有後綴)
* @throws Exception
*/
public static String savePictoServer(String base64String,String path,String imgName)throws Exception{
BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] bytes1 = decoder.decodeBuffer(base64String);
ByteArrayInputStream s = new ByteArrayInputStream(bytes1);
BufferedImage bi1 =ImageIO.read(s);
Date timeCur = new Date();
SimpleDateFormat fmtYY = new SimpleDateFormat("yyyy");
SimpleDateFormat fmtMM = new SimpleDateFormat("MM");
SimpleDateFormat fmtDD = new SimpleDateFormat("dd");
String strYY = fmtYY.format(timeCur);
String strMM = fmtMM.format(timeCur);
String strDD = fmtDD.format(timeCur);
String realPath = path+"/"+strYY+"/"+strMM+"/"+strDD;
File dir=new File(realPath);
if(!dir.exists()){
dir.mkdirs();
}
String fileName=path+"\\"+strYY+"\\"+strMM+"\\"+strDD +"\\"+imgName+".gif";
File w2 = new File(fileName);//可以是jpg,png,gif格式
ImageIO.write(bi1, "jpg", w2);//不管輸出什麼格式圖片,此處不需改動
return fileName;
}
public static void main(String[] args) throws Exception {
System.out.println(getImageFromServer("001001.gif","d:"));
}
}
㈤ JAVA怎麼樣實現Base64加密解密
package test;
import java.io.IOException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Test {
public static void main(String[] args) {
str = "java12345";
String ret = null;
ret = new BASE64Encoder().encode(str.getBytes());
System.out.println("加密前:"+str+" 加密後:"+ret);
str = "amF2YTEyMzQ1";
try {
ret = new String(new BASE64Decoder().decodeBuffer(str));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("解密前:"+str+" 解密後:"+ret);
}
}
㈥ Java Base64加碼解碼 Base64.encodeBase64 ( ) 和 new BASE64Enccoder( ).encode( )區別
我試了下,執行的效果一樣,具體的自己看源碼吧。看網上建議使用BASE64Encoder
㈦ java base64
java base64是什麼,讓我們一起了解一下?
Base64是一種編碼方法,要求把每三個8Bit的位元組轉換為四個6Bit的位元組,轉換之後的這四個位元組中每6個晌慧穗有效bit為有效數據,空餘的那兩個bit用0補上成為一個位元組。
為什麼要使用Base64?
Base 64主要用途不是加密,而是把一些二進制數轉成普通字元,方便在網路上傳輸。 由於一些二進制字元在傳輸協議中屬於控制字元,不能直接傳送,所以需要轉換一下才可以。由於某些系統中只能使用ASCII字元,Base64就是用來將非ASCII字元的數據轉換成ASCII字元的一種方法,Base64特別適合在http,mime協議下快速傳輸數據。
比如網路中圖片的傳輸Base64,並非安全領域下的加密解密演算法。雖然經常遇到所謂的base64的加密解密。但base64隻能算是一個編碼演算法,對數據內容進行編碼來適合傳輸。雖然base64編碼過後原文也變成不能看到的字元格式,但是方式初級又簡單。
那在Java中想要實現Base64的加解密,有哪些方式?
主要有以下四種(推薦度由低到高):
1、JDK中的宴卜sun.misc套碧桐件。
2、第三方擴展包 bouncy castle。
3、第三方擴展包 commons codec。
4、JDK8及更高版本中的 java.util.Base64。
實戰操作,JDK實現代碼如下: import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * BASE64加密解密 */ public class BASE64 { /** * BASE64解密 * @param key * @return * @throws Exception */ public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * BASE64加密 * @param key * @return * @throws Exception */ public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } public static void main(String[] args) throws Exception { String data = BASE64.encryptBASE64("http://aub.iteye.com/".getBytes()); System.out.println("加密前:" + data); byte[] byteArray = BASE64.decryptBASE64(data); System.out.println("解密後:" + new String(byteArray)); } }