精华内容
下载资源
问答
  • java Base64加密

    千次阅读 2016-08-26 21:02:50
    java Base64加密 密码常用术语  明文:待加密信息 密文:经过加密后的明文 加密:明文转为密文的过程 加密算法:明文转为密文的转换算法 加密密钥:通过加密算法进行加密 操作用的密钥 解密:将密文转为明文...

    java Base64加密

    密码常用术语 

    明文:待加密信息
    密文:经过加密后的明文
    加密:明文转为密文的过程
    加密算法:明文转为密文的转换算法
    加密密钥:通过加密算法进行加密 操作用的密钥
    解密:将密文转为明文的过程
    解密算法:密文转为明文的算法
    解密密钥:通过解密算法进行解密操作用的密钥
    密码分析:截获密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程
    主动攻击:攻击者非法入侵密码系统,采用伪造,修改,删除等手段向系统注入假消息进行欺骗(对密文具有破坏作用)
    被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击(对密文没有破坏作用)
    密码体质:由明文空间,密文空间,密钥空间,加密算法和解密算法五部分组成
    密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务
    密码系统:指用于加密,解密的系统
    柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。现代密码学设计的基本原则

    密码分类

    古典密码:以字符为基本加密单位
    现代密码:以信息块为基本加密单元
    密码分类--密码体制
    对称密码:单钥密码或私钥密码,指加密密钥与解密密钥相同
    非对称密码:双钥密码或公钥密码,指加密密钥与解密密钥不同,密钥分公钥,私钥
    对称密码算法:单钥密码算法或私钥密码算法,指应用于对称密码的加密,解密算法
    非对称密码算法:双钥密码算法或公钥密码算法,指对应于非对称密码的加密,解密算法
    密码分类--明文处理方法
    分组密码:指加密时将明文分成固定长度的组,用同一密钥和算法对每一块进行加密,输出也是固定长度的密文。多用于网络加密
    流密码:也称序列密码。指加密时每次加密一位或者一个字节明文

    散列函数

    主要是用来验证数据的完整性
    特点:长度不受限制,哈希值容易计算,散列运算过程不可逆
    相关的算法:消息摘要算法MD5等,SHA--安全散列算法 MAC--消息认证码算法(MAC--苹果操作系统)

    数字签名

    主要是针对以数字的形式存储的消息进行的处理

    安全机制

    加密机制 数字签名机制 访问控制机制 数据完整性机制 认证机制
    业务流填充机制 路由控制机制 公正机制

    安全服务

    认证(鉴别) 访问控制服务 数据保密性服务 数据完整性服务
    抗否认性服务

    java的安全组成

    JCA(Java Cryptography Architecture)
    提供基本的加密框架,比如信息摘要,数字签名
    JCE(Java Cryptography Extension)
    在JCA的基础上提供加密算法,DES,AES,RSA算法通过JCE提供
    JSSE(Java Secure Socket Extension)
    JSSE提供基于SSL的加密功能,主要用于网络传输
    JAAS(Java Authentication and Authentication Service)
    提供了在java平台上用户身份的验证
    java.security
    消息摘要
    javax.crypto
    安全消息摘要,消息认证(鉴别码)
    java.net.ssl
    安全套接字

    第三方java扩展

    Bouncy Castle
    两种支持方案:1)配置;2)调用
    Commons Codec
    Apache
    Base64,二进制,十六进制,字符集编码
    url编码/解码

    应用

    Base64算法
    消息摘要算法
    对称加密算法
    非对称加密算法
    数字签名算法
    数字证书
    安全协议

    code

    在这里分别实现了Base64的三种算法,如下所示:
    package com.edu.hpu.com;
    
    import org.apache.commons.codec.binary.Base64;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    public class Base64 {
          private static String src="hello world,base 64";
          public static void main(String[] args) {
        	  jdkBase64();
      		
      		  commonsCodesBase64();
    
      		  bouncyCastleBase64();
    	}
      	public static void jdkBase64()
      	{
      		try 
      		{
      			BASE64Encoder encoder = new BASE64Encoder();
      			String encode = encoder.encode(src.getBytes());
      			System.out.println("encode:" + encode);
      			
      			BASE64Decoder decoder = new BASE64Decoder();
      			System.out.println("decode:" + new String(decoder.decodeBuffer(encode)));
      			
      		} catch (Exception e) {
      			e.printStackTrace();
      		}
      	}
      	
      	
      	// 用Apache的common codes实现
      	public static void commonsCodesBase64()
      	{
      		byte[] encodeBytes = Base64.encodeBase64(src.getBytes());
      		System.out.println("common codes encode:" + new String(encodeBytes));
      		
      		byte[] dencodeBytes = Base64.decodeBase64(encodeBytes);
      		System.out.println("common codes decode:" + new String(dencodeBytes));
      		
      	}
      	
    
      	// 用bouncy castle实现
      	public static void bouncyCastleBase64()
      	{
      		byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
      		System.out.println("bouncy castle encode:" + new String(encodeBytes));
      		
      		byte[] dencodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
      		System.out.println("bouncy castle decode:" + new String(dencodeBytes));
      		
      	}
    
          
    }
    


    展开全文
  • Java BASE64加密解密

    千次阅读 2016-05-27 23:02:22
    Java加密解密系列 Java 加密解密基础 Java byte数组与十六进制字符串互转 Java BASE64加密解密 Java 加密解密之消息摘要算法(MD5 SHA MAC) ...Java 加密解密之对称加密算法PBEJava BASE64加密解密Base64

    Java加密解密系列

    Java 加密解密基础
    Java byte数组与十六进制字符串互转
    Java BASE64加密解密
    Java 加密解密之消息摘要算法(MD5 SHA MAC)
    Java 加密解密之对称加密算法DES
    Java 加密解密之对称加密算法DESede
    Java 加密解密之对称加密算法AES
    Java 加密解密之对称加密算法PBE

    Java BASE64加密解密

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

    RFC2045还规定每行位76个字符,每行末尾需添加一个回车换行符,即便是最后一行不够76个字符,也要加换行符。

    实现原理

    Base64实际上是对二进制码做分组转换操作
    1. 每3个8位二进制码位一组,转换为4个6位二进制码为一组(不足6位时地位补0)。3个8位二进制码和4个6位二进制码长度都是24位。
    2. 对获得的4个6位二进制码补位,每个6位二进制码添加两位高位0,组成4个8位二进制码。
    3. 将获得的4个8位二进制码转换为4个十进制码。
    4. 将获得的十进制码转换为Base64字符表中对应的字符。

    例如:

    1. 字符串“A”,进行Base64编码,如下所示:

      描述
      字符A
      ASCII码65
      二进制码01000001
      4个6位二进制码010000010000
      4个8位二进制码0001000000010000
      十进制码1616
      字符表映射码QQ==

      字符串“A”经过Base64编码后得到字符串“QQ==”。
      结果出现了两个等号。很显然,当原文的二进制码长度不足24位,最终转换为十进制时也不足4项,这时就需要用等号补位。
      将Base64编码后的字符串最多会有2个等号,这时因为:
      余数 = 原文字节数 MOD 3。

    2. 字符串“密”,对其使用UTF-8编码等到Byte数组{-27,-81,-122},

      描述
      字符
      UTF-8编码-27-81-122
      二进制码111001011010111110000110
      4个6位二进制码111001011010111110000110
      4个8位二进制码00111001000110100011111000000110
      十进制码5726626
      字符表映射码5a+G

      字符串“密”经过Base64编码后得到字符串“5a+G”。

    对照表:

    索引对应字符索引对应字符索引对应字符索引对应字符
    0A17R34i51z
    1B18S35j520
    2C19T36k531
    3D20U37l542
    4E21V38m553
    5F22W39n564
    6G23X40o575
    7H24Y41p586
    8I25Z42q597
    9J26a43r608
    10K27b44s619
    11L28c45t62+
    12M29d46u63/
    13N30e47v
    14O31f48w
    15P32g49x
    16Q33h50y

    java实现

    1. 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));  
          }  
      }  

      注意,sun.misc包是Sun公司提供给内部使用的专用API,在java API文档中我们看不到任何有关BASE64影子,不建议使用。

    2. Apache的实现:(建议使用这种方式,当然,自己实现也可以)
      参考org.apache.commons.codec.binary.Base64
      下载地址:http://commons.apache.org/codec/download_codec.cgi
      Apache还提供了,非标准的实现方式:

      • 不再添加回车符。
      • Url Base64,也就是将“+”和“\”换成了“-”和“_”符号,且不适用补位。

    本文参考《java 加密与解密的艺术》,和百度百科。

    展开全文
  • Java Base64 加密与解密

    万次阅读 2018-06-01 20:07:36
    Java Base64 加密与解密 本文我们探讨不同方式实现javaBase4加密和解密功能。主要是java 8 api为主,同时也学习来自Apache Commons 的API。 Java 8 中 Base 64 java 8 在标准API中增加Base64功能,通过 java....

    Java Base64 加密与解密

    本文我们探讨不同方式实现java中Base4加密和解密功能。主要是java 8 api为主,同时也学习来自Apache Commons 的API。

    Java 8 中 Base 64

    java 8 在标准API中增加Base64功能,通过 java.util.Base64工具类。首先我们看基本的加密过程:

    Java 8 基本 Base64

    基本的加密尽量保持简单,加密输入字符串没有增加任何换行符。输出被映射到“A-Za-z0-9+/”字符集中,解密从该字符集中解析为任意字符。

    首先加密一个简单字符串:

    String originalInput = "test input";
    String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes());

    我们通过简单Base64.getEncoder()工具方法获得完整的加密API,现在我们来解密并返回原始字符串:

    byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
    String decodedString = new String(decodedBytes);

    java 8 Base64编码没有填充

    如果Base64编码的二进制数据不是3的倍数,输出结果使用“=”号进行填充,所以结果会有一个或两个“=”号。
    解密是填充的“=”号会被丢弃。如果你省略填充“=”,结果字符串可能不能被正确解密,可以简单使用解密没有填充方法:

    String encodedString = 
      Base64.getEncoder().withoutPadding().encodeToString(originalInput.getBytes());

    Java 8 URL 加密

    URL加密和上述基本加密类似,它使用URL和文件名安全Base64字母表(没有‘+’和‘/’,增加‘-’和‘_’),不添加任何换行隔:

    String originalUrl = "https://www.google.co.nz/?gfe_rd=cr&ei=dzbFV&gws_rd=ssl#q=java";
    String encodedUrl = Base64.getUrlEncoder().encodeToString(originalURL.getBytes());

    解密方式一致——getUrlDecoder() 工具方法返回java.util.Base64.Decoder ,然后解密URL:

    byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedUrl);
    String decodedUrl = new String(decodedBytes);

    Java 8 MIME 加密

    MIME 英文全称为:Multipurpose Internet Mail Extensions。
    首先生成一些基本MIME输入数据用于加密:

    private static StringBuilder getMimeBuffer() {
        StringBuilder buffer = new StringBuilder();
        for (int count = 0; count < 10; ++count) {
            buffer.append(UUID.randomUUID().toString());
        }
        return buffer;
    }

    MIME加密工具生成Base64加密输出,输出被映射到“A-Za-z0-9+/”字符集中,编码输出必须以每行不超过76个字符的形式表示,并使用后面跟着的回车符’\r’和换行符’\n’为分隔符。

    StringBuilder buffer = getMimeBuffer();
    byte[] encodedAsBytes = buffer.toString().getBytes();
    String encodedMime = Base64.getMimeEncoder().encodeToString(encodedAsBytes);

    getMimeDecoder() 工具方法返回java.util.Base64.Decoder 用于解密过程:

    byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedMime);
    String decodedMime = new String(decodedBytes);

    使用Apache Commons Code实现加密和解密

    首先引入maven依赖:

    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.10</version>
    </dependency>

    其主要API是org.apache.commons.codec.binary.Base64类,其重构了带有不同参数的构造函数。

    • Base64(boolean urlSafe) – 通过控制URL安全模式创建 Base64 API
    • Base64(int lineLength) – 创建URL非安全模式的 Base64 API ,并控制行的长度(缺省为 76)
    • Base64(int lineLength, byte[] lineSeparator) – 接收额外换行符参数创建 Base64 API去,缺省为 CRLF (“\r\n”)

    Base64 API创建之后,加密、解密则非常简单:

    String originalInput = "test input";
    Base64 base64 = new Base64();
    String encodedString = new String(base64.encode(originalInput.getBytes()));

    Base64的decode() 方法返回解密字符串:

    String decodedString = new String(base64.decode(encodedString.getBytes()));

    另外也可以使用Base64静态API,代替创建实例:

    String originalInput = "test input";
    String encodedString = new String(Base64.encodeBase64(originalInput.getBytes()));
    String decodedString = new String(Base64.decodeBase64(encodedString.getBytes()));

    总结

    本文介绍了java中Base64加密和解密的基本用法,使用java 8 新引入的API和Apache Commons。
    另外还有其他库实现类似功能——java.xml.bind.DataTypeConverter 提供的 printHexBinary 和 parseBase64Binary。

    展开全文
  • JAVA BASE64 加密解密实现代码

    千次阅读 2015-07-28 14:17:03
    JAVA BASE64 加密解密实现代码

    1、代码

    package com.zhaochao.utill;
    import java.io.UnsupportedEncodingException;
    import java.lang.reflect.Method;
    
    public class Base64Utill {
    	public static String encode(String code) throws UnsupportedEncodingException, Exception {
    		return encodeBase64(code.getBytes());
    	}
    
    	public static String decode(String code) throws UnsupportedEncodingException, Exception {
    		return new String(decodeBase64(code));
    	}
    
    	public static String encodeBase64(byte[] input) throws Exception {
    		Class clazz = Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
    		Method mainMethod = clazz.getMethod("encode", byte[].class);
    		mainMethod.setAccessible(true);
    		Object retObj = mainMethod.invoke(null, new Object[] { input });
    		return (String) retObj;
    	}
    
    	public static byte[] decodeBase64(String input) throws Exception {
    		Class clazz = Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
    		Method mainMethod = clazz.getMethod("decode", String.class);
    		mainMethod.setAccessible(true);
    		Object retObj = mainMethod.invoke(null, input);
    		return (byte[]) retObj;
    	}
    
    	public static void main(String[] rags) throws UnsupportedEncodingException, Exception {
    		String str = "abadjfajerjaqwrasdf";
    		String code = Base64Utill.encode(str);
    		System.err.println("加密前:" + str);
    		System.err.println("加密后:" + code);
    		System.err.println("解密后:" + Base64Utill.decode(code));
    
    	}
    
    }
    

    2、输出结果

    加密前:abadjfajerjaqwrasdf
    加密后:YWJhZGpmYWplcmphcXdyYXNkZg==
    解密后:abadjfajerjaqwrasdf
    


    展开全文
  • Java Base64加密源码

    2019-04-30 10:41:50
    如下的内容段是关于Java Base64加密的内容,应该能对大伙有些用。 import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.OutputStream; import ...
  • [img=https://img-bbs.csdn.net/upload/202008/20/1597899065_930626.png][/img][img=....net 解析后数值是24位,并提示IV 错误 按照AES规则IV向量是16位,Java 是16位
  • Java base64加密解密 两种实现方式

    万次阅读 多人点赞 2018-11-02 21:41:51
     Base 64主要用途不是加密,而是把一些二进制数转成普通字符,方便在网络上传输。 由于一些二进制字符在传输协议中属于 控制字符,不能直接传送,所以需要转换一下才可以。由于某些系统中只能使用ASCII字符,Base...
  • import java.util.Base64; public class Dmeo { public static void main(String[] args) { //定义字符串 String s = "hello world"; //将字符串转化为字节类型,通过Base64加密 String s1 = Base64.get...
  • Java BASE64加密解密 url等

    千次阅读 2012-10-28 08:48:53
    Java BASE64加密解密 Java BASE64加密解密 import org.apache.commons.codec.binary.Base64; 在commons-codec.jar这个包里面使用的时候要引用这个包   Base64是网络上最常见的用于传输8Bit...
  • java Base64加密实现

    千次阅读 2016-05-15 10:58:24
    Base64是网络上最常见的用于传输的8bit字节代码的编码方式,也常将把需要的二进制数据编码放在url中的形式上传,由于可读性差,所编码的数据不会被直接看到信息详情! Base64 是采用字符替换的方式,将3个8位字节(3*...
  • Java Base64加密解码实例

    万次阅读 2013-06-09 17:41:36
    import java.io.ByteArrayOutputStream; public class Base64 ... private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
  • java Base64 加密工具类

    千次阅读 2018-06-13 19:06:03
    整理项目使用的工具类... private static Logger logger = LoggerFactory.getLogger(Base64Util.class); // private static final String charset = &amp;amp;quot;utf-8&amp;amp;quot;; private static ...
  • java Base64加密解密中文乱码处理

    万次阅读 2018-11-12 11:04:03
    前端:因base64对中文支持不友好,故需要对中文进行编码之后再转base64 var sendData = {  'inserted':encode64(encodeURIComponent(JSON.stringify(inserted))) } 后台:必须指定编码为UTF-8,否则中文解码后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,638
精华内容 24,655
关键字:

java的base64加密

java 订阅