因为BASE64的加密解密算法是公开的,所以加密数据是没有任何安全性可言。先来看看API文档中提供的BASE64加密的类。除了在JDK中内置的也有一些第三方类会提供BASE64加密的类。
代码实例: package com.demo; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.IOException; public class base64demo { public static void main(String[] args) throws IOException { String name = "xiaoming"; BASE64Encoder encoder = new BASE64Encoder//实例化BASE64Encoder对象 String encode = encoder.encode(name.getBytes());//调用encode进行加密 System.out.println(encode); BASE64Decoder base64Decoder = new BASE64Decoder();//实例化BASE64Decoder对象 byte[] bytes = base64Decoder.decodeBuffer(encode);//进行解密 System.out.println(bytes); String s = new String(bytes); System.out.println(s); } }BASE64的加解密比较简单,在这里就不细说了。
DESDES的算法其实已经被公开了,其实是不太安全的。
代码实例: package com.demo; import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin; import javax.crypto.*; import javax.crypto.spec.DESKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; public class desdemo { private static String name = "xiaoming"; public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException { //1.生成密钥 KeyGenerator des = KeyGenerator.getInstance("DES");//设置获取des的密钥 des.init(56);//初始化密钥生成器,设置为56长度的密钥 SecretKey secretKey = des.generateKey();//获取密钥 // System.out.println(secretKey); byte[] deskey = secretKey.getEncoded(); //获取密钥的byte数组 //2.密钥转换 DESKeySpec desKeySpec = new DESKeySpec(deskey); SecretKeyFactory des1 = SecretKeyFactory.getInstance("DES"); SecretKey secretKey1 = des1.generateSecret(desKeySpec); // System.out.println(secretKey1); //3.加密 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//选择算法、工作模式和填充方式 cipher.init(Cipher.ENCRYPT_MODE,secretKey1);//选择加密模式和密钥进行加密 byte[] res = cipher.doFinal(name.getBytes());//加密数据 // System.out.println(res); // String s = new String(res); System.out.println(HexBin.encode(res));//输出加密后结果 //4.解密 cipher.init(Cipher.DECRYPT_MODE,secretKey1);//选择密钥,并使用解密模式 byte[] bytes = cipher.doFinal(res);//解密加密后的结果 String s1 = new String(bytes); System.out.println(s1); } } 3DES3DES也被叫做DESede,也就是基于DES三次加密。其实也有四层和两层DES,但是平时中用的最多的还是3DES。
上面的图是他的一个算法的说明图。
其实3DES和DES在代码中的实现方式很相似。但是要注意的一点是密钥长度要选择正确,否则会报错。或者是可以使用SecureRandom()类,让他根据选择的加密算法使用默认的密钥长度。
代码实例: package com.demo; import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin; import javax.crypto.*; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.DESedeKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; public class jdk3des { private static String name = "xiaoming"; public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException, BadPaddingException, IllegalBlockSizeException { //1.生成密钥 KeyGenerator des = KeyGenerator.getInstance("DESede");//设置获取des的密钥 // des.init(168);//初始化密钥生成器,设置为168长度的密钥 des.init(new SecureRandom());//根据加密算法使用默认密钥长度 SecretKey secretKey = des.generateKey();//获取密钥 // System.out.println(secretKey); byte[] deskey = secretKey.getEncoded(); //获取密钥的byte数组 //2.密钥转换 DESedeKeySpec desKeySpec = new DESedeKeySpec(deskey); SecretKeyFactory des1 = SecretKeyFactory.getInstance("DESede"); SecretKey secretKey1 = des1.generateSecret(desKeySpec); // System.out.println(secretKey1); //3.加密 Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");//选择算法、工作模式和填充方式 cipher.init(Cipher.ENCRYPT_MODE,secretKey1);//选择加密模式和密钥进行加密 byte[] res = cipher.doFinal(name.getBytes());//加密数据 // System.out.println(res); // String s = new String(res); System.out.println(HexBin.encode(res));//输出加密后结果 //4.解密 cipher.init(Cipher.DECRYPT_MODE,secretKey1);//选择密钥,并使用解密模式 byte[] bytes = cipher.doFinal(res);//解密加密后的结果 String s1 = new String(bytes); System.out.println(s1); } } AESAES是目前用的最多的对称加密算法,一般用于移动通讯系统加密或者是基于SSH协议的软件