博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对称加密PBE(代码实现)
阅读量:6273 次
发布时间:2019-06-22

本文共 3002 字,大约阅读时间需要 10 分钟。

  hot3.png

package com.dy.encryption.symmetric;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKeySpec;import javax.crypto.spec.PBEParameterSpec;import java.security.Key;import java.util.Random;/** * PBE——Password-based encryption(基于密码加密)。 (想了解更多的加密,解密算法和数字签名实现,请游览本人博客) * 其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。 * 是一种简便的加密方式。 */public class PBEdemo {    /**     * 支持以下任意一种算法     * 

*

     * PBEWithMD5AndDES     * PBEWithMD5AndTripleDES     * PBEWithSHA1AndDESede     * PBEWithSHA1AndRC2_40     * 
*/ public static final String ALGORITHM = "PBEWITHMD5andDES"; /** * 盐初始化 * * @return * @throws Exception */ public static byte[] initSalt() throws Exception { byte[] salt = new byte[8]; Random random = new Random(); random.nextBytes(salt); return salt; } /** * 转换密钥
* * @param password * @return * @throws Exception */ private static Key toKey(String password) throws Exception { PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); SecretKey secretKey = keyFactory.generateSecret(keySpec); return secretKey; } /** * 加密 * * @param data 数据 * @param password 密码 * @param salt 盐 * @return * @throws Exception */ public static String encrypt(String data, String password, byte[] salt) throws Exception { Key key = toKey(password); PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); return new BASE64Encoder().encode(cipher.doFinal(data.getBytes("UTF-8"))); } /** * 解密 * * @param data 数据 * @param password 密码 * @param salt 盐 * @return * @throws Exception */ public static String decrypt(String data, String password, byte[] salt) throws Exception { Key key = toKey(password); PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, key, paramSpec); return new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(data))); } public static void main(String[] args) { try { String input = "PBE"; String pwd = "dyyweb"; byte[] salt = PBEdemo.initSalt(); System.err.println("原文: " + input); String encrypt_input = PBEdemo.encrypt(input, pwd, salt) ; System.err.println("加密后: " + encrypt_input ); System.err.println("解密后: " + PBEdemo.decrypt(encrypt_input,pwd,salt)); } catch (Exception e) { e.printStackTrace(); } }}

转载于:https://my.oschina.net/dyyweb/blog/657852

你可能感兴趣的文章
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>