Java安全之安全加密算法( 二 )


Java安全之安全加密算法文章插图
Java安全之安全加密算法文章插图
代码实例: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);}}
Java安全之安全加密算法文章插图
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);}}
Java安全之安全加密算法文章插图
3DES3DES也被叫做DESede , 也就是基于DES三次加密 。 其实也有四层和两层DES , 但是平时中用的最多的还是3DES 。
Java安全之安全加密算法文章插图
上面的图是他的一个算法的说明图 。
其实3DES和DES在代码中的实现方式很相似 。 但是要注意的一点是密钥长度要选择正确 , 否则会报错 。 或者是可以使用SecureRandom()类 , 让他根据选择的加密算法使用默认的密钥长度 。
Java安全之安全加密算法文章插图
代码实例: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);}}