zoukankan      html  css  js  c++  java
  • 【Java/加解密】使用PBEWITHMD5andTripleDES算法进行加解密

    代码:

    package ufo;
    
    import java.security.Key;
    import java.security.SecureRandom;
    
    import javax.crypto.Cipher;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.PBEKeySpec;
    import javax.crypto.spec.PBEParameterSpec;
    
    import org.apache.commons.codec.binary.Base64;
    
    public class PBEWITHMD5andTripleDES_Test {
        // Java 6 支持多种PBE算法,PBEWITHMD5andTripleDES是其中一种
        private static final String ALGORITHM = "PBEWITHMD5andTripleDES";
    
        public static void main(String... args) {
            String original="Let’s Build a Giant Airship 青海长云暗雪山";
            System.out.println("原文=	"+original);
            
            try {
                // 生产密钥
                String password="haha168";// 口令
                PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
                SecretKeyFactory factory=SecretKeyFactory.getInstance(ALGORITHM);
                Key key =factory.generateSecret(pbeKeySpec);// 密钥,下面加密解密都要用到
                System.out.println("密钥=	"+Base64.encodeBase64String(key.getEncoded()));
                
                // 初始化盐
                SecureRandom random=new SecureRandom();
                byte [] salt=random.generateSeed(8);
                PBEParameterSpec pbeParameterSpec=new PBEParameterSpec(salt, 100);
                
                // 加密
                Cipher cipher =Cipher.getInstance(ALGORITHM);
                cipher.init(Cipher.ENCRYPT_MODE,key, pbeParameterSpec);
                byte[] bytes = cipher.doFinal(original.getBytes());
                String cipherTxt=Base64.encodeBase64String(bytes);
                System.out.println("密文=	"+cipherTxt);
                
                // 解密
                cipher.init(Cipher.DECRYPT_MODE,key,pbeParameterSpec);
                bytes=cipher.doFinal(bytes);
                String plainTxt=new String(bytes);
                System.out.println("解密后=	"+plainTxt);
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    输出:

    原文=    Let’s Build a Giant Airship 青海长云暗雪山
    密钥=    aGFoYTE2OA==
    密文=    1X7LW1lXZDKkF9HaFOf414JkPltG7vPO26rV2DbMVgopiXGuel8PFrZM6DUy5Mab
    解密后=    Let’s Build a Giant Airship 青海长云暗雪山

    END

  • 相关阅读:
    07-图4 哈利·波特的考试 (25分)
    Windows环境下清除SVN文件
    查看SQL SERVER 2008R2 表大小
    Oauth支持的5类 grant_type 及说明
    SignalR的性能监测
    Loadrunner11安装
    Azure ServiceBus 通信失败问题
    sql server text类型 存储问题
    System.BadImageFormatException
    InputStream只能读取一次的解决办法 C# byte[] 和Stream转换
  • 原文地址:https://www.cnblogs.com/heyang78/p/15365746.html
Copyright © 2011-2022 走看看