Java的各种加密算法

Posted 整合侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java的各种加密算法相关的知识,希望对你有一定的参考价值。

Java的各种加密算法

JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密

 

 1.单向加密算法

 

 单向加密算法主要用来验证数据传输的过程中,是否被篡改过。

 

  • BASE64 严格地说,属于编码格式,而非加密算法

  • MD5(Message Digest algorithm 5,信息摘要算法)

  • SHA(Secure Hash Algorithm,安全散列算法)

  • HMAC(Hash Message Authentication Code,散列消息鉴别码

 

 2.对称和非对称加密算法

 

   对称和非对称加密算法主要采用公钥和私钥的形式,来对数据加密。
  • DES(Data Encryption Standard,数据加密算法)

  • PBE(Password-based encryption,基于密码验证)

  • RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)

  • DH(Diffie-Hellman算法,密钥一致协议)

  • DSA(Digital Signature Algorithm,数字签名)

  • ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)

 

关于加密算法的具体详情:
1.1  BASE64
       Base是网络上最常见的用于传输Bit字节代码的编码方式之一,大家可以查看RFC~RFC,上面有MIME的详细规范。Base编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base来将一个较长的唯一标识符(一般为-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
java实现代码:
//单向加密
package com.cn.BaseTest;
import sun.misc.BASEDecoder;
import sun.misc.BASEEncoder;
/*
BASE的加密解密是双向的,可以求反解.
BASEEncoder和BASEDecoder是非官方JDK实现类。虽然可以在JDK里能找到并使用,但是在API里查不到。
JRE 中 sun 和 com.sun 开头包的类都是未被文档化的,他们属于 java, javax 类库的基础,其中的实现大多数与底层平台有关,
一般来说是不推荐使用的。
BASE 严格地说,属于编码格式,而非加密算法
主要就是BASEEncoder、BASEDecoder两个类,我们只需要知道使用对应的方法即可。
另,BASE加密后产生的字节位数是的倍数,如果不够位数以=符号填充。
BASE
按照RFC的定义,Base被定义为:Base内容传送编码被设计用来把任意序列的位字节描述为一种不易被人直接识别的形式。
(The Base Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE加密的。
*/
public class BASE {
/** * BASE解密 * * @param key * @return * @throws Exception */ public static byte[] decryptBASE(String key) throws Exception {   return (new BASEDecoder()).decodeBuffer(key); }
/** * BASE加密 * * @param key * @return * @throws Exception */ public static String encryptBASE(byte[] key) throws Exception {   return (new BASEEncoder()).encodeBuffer(key); }
public static void main(String[] args) {   String str="123456";     try {      String result= BASE.encryptBASE(str.getBytes());     System.out.println("加密数据>>>>:"+result);     byte result[]= BASE.decryptBASE(result);     String str=new String(result);     System.out.println("解密数据>>>>:"+str);     } catch (Exception e) {      e.printStackTrace();     }  } }

 1.2  MD5加密

        MD5即Message-Digest Algorithm (信息-摘要算法),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理。广泛用于加密和解密技术,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文件是否一致的。

 java实现代码:
 1 //单向加密
 2 package com.cn.MD5Test;
 3 import java.math.BigInteger;
 4 import java.security.MessageDigest;
 5 /*
 6 MD5(Message Digest algorithm ,信息摘要算法)
 7 通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE再加密一把,得到相应的字符串
 8 Digest:汇编
 9 */
10 public class MD {
11 
12     public static final String KEY_MD = "MD5"; 
13 
14     public static String getResult(String inputStr){
15         System.out.println("加密前的数据>>>>:"+inputStr);
16         BigInteger bigInteger=null;
17         try {
18             MessageDigest md = MessageDigest.getInstance(KEY_MD); 
19             byte[] inputData = inputStr.getBytes();
20             md.update(inputData); 
21             bigInteger = new BigInteger(md.digest()); 
22         } catch (Exception e) {e.printStackTrace();}
23             System.out.println("MD5加密后>>>>:" + bigInteger.toString()); 
24             return bigInteger.toString();
25         }
26     }
27 
28     public static void main(String args[]){
29         try {
30             String inputStr = "123456"; 
31             getResult(inputStr);
32         } catch (Exception e) {
33             e.printStackTrace();
34         }
35     }
36 }           

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 





以上是关于Java的各种加密算法的主要内容,如果未能解决你的问题,请参考以下文章

java 各种加密算法

各种Java加密算法

(java加密解密)如何实现JCE接口的各种算法??

Java执行js加密算法

java加密算法入门-算法概念及单向加密

可以解密加密数据的片段吗?