Imooc_JAVA实现对称加密4-1 JAVA-对称加密算法PBE

原视频地址
Imooc_JAVA实现对称加密4-1 JAVA-对称加密算法PBE

package PBE;

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.Hex;

import Base64.Base64;

public class PBE {

    private static  String src = "imooc security pbe";

    public static void main(String[] args) {
        jdkPBE();
    }//main方法结束



    private static void jdkPBE(){
        try {
            /*盐值就是在密码hash过程中添加的额外的随机值,如,用户的ID就可以作为盐值,
                 来进行hash,生产密文,进而,可以做到密码保护的目的
            */

            //初始化盐(口令):加密的随机数或字符串           通过随机数random来产生盐
            //SecureRandom提供加密的强随机数生成器 (RNG)
            SecureRandom random = new SecureRandom();
            byte[] salt = random.generateSeed(8);//返回给定的种子字节数量,该数量可使用此类用来为其自身提供种子的种子生成算法来计算。


            //加密  首先定义密码
            //口令与密钥
            String password = "jluzh";
            //通过PBEKeySpec类实例化一个能够把           盐 密码 口令转为密钥               的对象pbeKeySpec
            //PBEKeySpec可以将密码视为某种原始密钥内容,由此加密机制使用其导出一个密钥
            PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
            //SecretKeyFactory类秘密密钥的工厂。 密钥工厂用来将密钥(类型 Key 的不透明加密密钥)转换为密钥规范(底层密钥材料的透明表示形式)
            //getInstance返回转换指定算法的秘密密钥的 SecretKeyFactory 对象  
            //algorithm参数 - 所请求的秘密密钥算法的标准名称
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
            //通过factory 的generateSecret 生成Key       根据提供的密钥规范(密钥材料)生成 SecretKey 对象  keySpec - 秘密密钥的规范(密钥材料)     
//          generateSecret()参数为秘钥材料desKeySpec   该生成我们所需要的秘钥
            Key key = factory.generateSecret(pbeKeySpec);

            //加密
            //实例化一个PBE的参数的输入材料  为 PKCS #5 标准中所定义的基于密码的加密法构造一个参数集合。 
            //salt - salt。复制该 salt 的内容来防止后续修改。  iterationCount - 迭代计数。 
            PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt,100);
            //KEY转换完之后      Cipher类的实例来进行加密和解密操作
            //getInstance("加解密算法/工作方式/填充方式")
            //Cipher此类为加密和解密提供密码功能  
            Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
            //cipher.init(opmode, certificate);  第一个参数为模式  第二个参数为转换后的KEY
//          Cipher.ENCRYPT_MODE加密模式     转换后的KEY:convertsecretKey
            cipher.init(Cipher.ENCRYPT_MODE, key,pbeParameterSpec);
            //doFinal(input);  input即使要被加密的内容
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println("jdk pbe encrypt:"+org.apache.commons.codec.binary.Base64.encodeBase64String(result));


            //解密
            //cipher.init(opmode, certificate);  第一个参数为模式  第二个参数为转换后的KEY
//          Cipher.ENCRYPT_MODE解密模式     转换后的KEY:convertsecretKey
            cipher.init(Cipher.DECRYPT_MODE, key,pbeParameterSpec);
            result = cipher.doFinal(result);
            System.out.println("jdk pbe decrypt:"+new String(result));

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}//PBE类结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值