㈠ 关于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)); } }