zoukankan      html  css  js  c++  java
  • java中常用的数据加密算法

    以下为加密的工具类:

    import java.io.UnsupportedEncodingException;
    import java.security.InvalidKeyException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.SecureRandom;
    
    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.SecretKey;

      import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64DecoderStream;
      import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream;

    public class util {
        /**
         * 传入名文和公钥钥对数据进行RSA解密
         * <br>生成时间:2014年5月2日  下午2:38:13
         * <br>返回值:String
         * <br>@param src
         * <br>@param pubkey
         * <br>@return
         */
        public static String rsaEncoding(String src,PublicKey pubkey){
            try {
                Cipher cip = Cipher.getInstance("RSA");
                cip.init(cip.ENCRYPT_MODE, pubkey);
                byte[] by = cip.doFinal(src.getBytes());
                return new String(BASE64EncoderStream.encode(by));
                
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            } catch (NoSuchPaddingException e) {
                throw new RuntimeException(e);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            }
            
        }
        /**
         * 传入RSA密文和私钥对数据进行解密
         * <br>生成时间:2014年5月2日  下午2:37:08
         * <br>返回值:String
         * <br>@param sec
         * <br>@param privkey
         * <br>@return
         */
        public static String rsaDeEncoding(String sec,PrivateKey privkey){
            try {
                Cipher cip = Cipher.getInstance("RSA");
                cip.init(cip.DECRYPT_MODE, privkey);
                byte[] by = BASE64DecoderStream.decode(sec.getBytes());
                return new String(cip.doFinal(by));
                
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            } catch (NoSuchPaddingException e) {
                throw new RuntimeException(e);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            }
            
        }
        
        /**
         * 传入字符串、密钥,并加密字符串(对称加密加密),支持:DES、AES、DESede(3DES)
         * <br>生成时间:2014年5月2日  下午12:05:44
         * <br>返回值:String 密文
         * <br>@param src
         * <br>@param key
         * <br>@param method(DES、AES、DESede)
         * <br>@return
         */
        //对称加密加密
        public static String doubKeyEncoding(String src,String keysrc,String method) {
            SecretKey key;
            try {
                //生成密钥
                KeyGenerator kg =  KeyGenerator.getInstance(keysrc);
                //初始化此密钥生成器。
                kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
                key = kg.generateKey();
                
                //加密
                Cipher ciph =  Cipher.getInstance(method);
                ciph.init(Cipher.ENCRYPT_MODE, key);
                ciph.update(src.getBytes("utf-8"));
                //使用64进行编码,一避免出现丢数据情景
                byte[] by = BASE64EncoderStream.encode(ciph.doFinal());
                return new String(by);
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            } catch (NoSuchPaddingException e) {
                throw new RuntimeException(e);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }
        /**
         * 传入字符串、密钥、加密方式,并解密字符串(对称加密解密密),支持:DES、AES、DESede(3DES)
         * <br>生成时间:2014年5月2日  下午1:12:13
         * <br>返回值:String 密钥原文
         * <br>@param sec
         * <br>@param key
         * <br>@param method(DES、AES、DESede)
         * <br>@return
         */
        public static String doubKeyDencoding(String sec,String keysrc,String method) {
            SecretKey key;
            try {
                //生成密钥
                KeyGenerator kg =  KeyGenerator.getInstance(keysrc);
                //初始化此密钥生成器。
                kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
                key = kg.generateKey();
                //加密
                Cipher ciph =  Cipher.getInstance(method);
                ciph.init(ciph.DECRYPT_MODE, key);
                //使用64进行解码,一避免出现丢数据情况
                byte[] by = BASE64DecoderStream.decode(sec.getBytes());
                ciph.update(by);
                return new String(ciph.doFinal());
                
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            } catch (NoSuchPaddingException e) {
                throw new RuntimeException(e);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }
            
        /**
         * 单向信息加密(信息摘要),支持:md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512,
         * <br>生成时间:2014年5月2日  上午11:13:44
         * <br>返回值:String         加密后的密文
         * <br>@param src     传入加密字符串(明文)
         * <br>@param method  指定算法(md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512)
         * <br>@return
         */
        public static String ecodingPasswd(String src,String method){
            
            try {
                //信息摘要算法
                MessageDigest md5 = MessageDigest.getInstance(method);
                md5.update(src.getBytes());
                byte[] encoding = md5.digest();
                //使用64进行编码,一避免出现丢数据情景
                return new String(BASE64EncoderStream.encode(encoding));
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e+"加密失败!!");
            }
            
        }
    }

    以下为测试类

    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    import java.security.NoSuchAlgorithmException;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    
    import org.junit.Test;
    
    import com.shuqi.utils.util;
    
    public class test {
        @Test
        public void ecoding() {
    //        //MD5 加密
    //        System.out.println("md5"+util.ecodingPasswd("shuqi", "md5"));
    //        System.out.println("md2"+util.ecodingPasswd("shuqi", "md2"));
    //        //sha加密
    //        System.out.println("sha"+util.ecodingPasswd("shuqi", "sha"));
    //        System.out.println("sha-1"+util.ecodingPasswd("shuqi", "sha-1"));
    //        System.out.println("sha1"+util.ecodingPasswd("shuqi", "sha1"));
    //        System.out.println("sha-256"+util.ecodingPasswd("shuqi", "sha-256"));
    //        System.out.println("sha-384"+util.ecodingPasswd("shuqi", "sha-384"));
    //        System.out.println("sha-512"+util.ecodingPasswd("shuqi", "sha-512"));
            
    //        String mi = util.doubKeyEncoding("hehe", "shuqi", "AES");
    //        String ming = util.doubKeyDencoding(mi, "shuqi", "AES");
    //        System.out.println("AES加密解密");
    //        System.out.println("加密hehhe,密文   >>>     "+mi);
    //        System.out.println("解密"+mi+",明文   >>>     "+ming);
    //        
    //        mi = util.doubKeyEncoding("hehe", "shuqi", "DES");
    //        ming = util.doubKeyDencoding(mi, "shuqi", "DES");
    //        System.out.println("DES加密解密");
    //        System.out.println("加密hehhe,密文   >>>     "+mi);
    //        System.out.println("解密"+mi+",明文   >>>     "+ming);
    //        
    //        mi = util.doubKeyEncoding("hehe", "shuqi", "DESede");
    //        ming = util.doubKeyDencoding(mi, "shuqi", "DESede");
    //        System.out.println("DESede加密解密");
    //        System.out.println("加密hehhe,密文   >>>     "+mi);
    //        System.out.println("解密"+mi+",明文   >>>     "+ming);
        
        /**
         * RSA算法的验证
         */
            try {
                //实例化一个密钥对生成器
                KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
                //得到密钥对对象
                KeyPair kp = kpg.genKeyPair();
                PrivateKey prikay  = kp.getPrivate();
                PublicKey  pubkey = kp.getPublic();
                
                String mi = util.rsaEncoding("shuqi", pubkey);
                String ming = util.rsaDeEncoding(mi, prikay);
                System.out.println(ming+" :: "+mi);
                
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
    
    }

      参考文章:shibenjie的博文  snowolf的博文

    人生哪有不疯狂!
  • 相关阅读:
    Ubuntu 16.04 swoole扩展安装注意!!!
    go mod使用指南
    基于gin框架-验证码demo
    go(基于gin开发提升效率)--Air
    go mod路径引入并代码提示
    golang在win10下安装问题(一)
    win10下beego安装注意坑(一)
    API统一管理平台-YApi
    vim编辑
    swool安装(centos7)
  • 原文地址:https://www.cnblogs.com/shuqi/p/java.html
Copyright © 2011-2022 走看看