package com.bsd.yx;import java.security.Key;
import java.security.Security;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.crypto.Cipher;import com.ibm.model.cxf.Safety;/*** 加密与解密* @author tanf* @date 2013-11-08*/
public class EncryptionDecryption {/*** 默认密钥*/private static String strDefaultKey = "tandaly201124335";/** 加密工具 */private static Cipher encryptCipher = null;/** 解密工具 */private static Cipher decryptCipher = null;/*** 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]* hexStr2ByteArr(String strIn) 互为可逆的转换过程* * @param arrB*            需要转换的byte数组* @return 转换后的字符串* @throws Exception* */public static String byteArr2HexStr(byte[] arrB) throws Exception {int iLen = arrB.length;// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍StringBuffer sb = new StringBuffer(iLen * 2);for (int i = 0; i < iLen; i++) {int intTmp = arrB[i];// 把负数转换为正数while (intTmp < 0) {intTmp = intTmp + 256;}// 小于0F的数需要在前面补0if (intTmp < 16) {sb.append("0");}sb.append(Integer.toString(intTmp, 16));}return sb.toString();}/*** 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)* 互为可逆的转换过程* * @param strIn*            需要转换的字符串* @return 转换后的byte数组* @throws Exception* */public static byte[] hexStr2ByteArr(String strIn) throws Exception {byte[] arrB = strIn.getBytes();int iLen = arrB.length;// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2byte[] arrOut = new byte[iLen / 2];for (int i = 0; i < iLen; i = i + 2) {String strTmp = new String(arrB, i, 2);arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);}return arrOut;}/*** 默认构造方法,使用默认密钥* * @throws Exception*/public EncryptionDecryption() throws Exception {this(strDefaultKey);}/*** 指定密钥构造方法* * @param strKey*            指定的密钥* @throws Exception*/public EncryptionDecryption(String strKey) throws Exception {Security.addProvider(new com.sun.crypto.provider.SunJCE());Key key = getKey(strKey.getBytes());encryptCipher = Cipher.getInstance("DES");encryptCipher.init(Cipher.ENCRYPT_MODE, key);decryptCipher = Cipher.getInstance("DES");decryptCipher.init(Cipher.DECRYPT_MODE, key);}/*** 加密字节数组* * @param arrB*            需加密的字节数组* @return 加密后的字节数组* @throws Exception*/public static byte[] encrypt(byte[] arrB) throws Exception {return encryptCipher.doFinal(arrB);}/*** 加密字符串* * @param strIn*            需加密的字符串* @return 加密后的字符串* @throws Exception*/public static String encrypt(String strIn) throws Exception {return byteArr2HexStr(encrypt(strIn.getBytes()));}/*** 解密字节数组* * @param arrB*            需解密的字节数组* @return 解密后的字节数组* @throws Exception*/public static byte[] decrypt(byte[] arrB) throws Exception {return decryptCipher.doFinal(arrB);}/*** 解密字符串* * @param strIn*            需解密的字符串* @return 解密后的字符串* @throws Exception*/public static String decrypt(String strIn) throws Exception {try {return new String(decrypt(hexStr2ByteArr(strIn)));} catch (Exception e) {return "";}}/*** 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位* * @param arrBTmp*            构成该字符串的字节数组* @return 生成的密钥* @throws java.lang.Exception*/private Key getKey(byte[] arrBTmp) throws Exception {// 创建一个空的8位字节数组(默认值为0)byte[] arrB = new byte[8];// 将原始字节数组转换为8位for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {arrB[i] = arrBTmp[i];}// 生成密钥Key key = new javax.crypto.spec.SecretKeySpec(arrB, "ABC");return key;}/*** 自定义加密* * @param arrBTmp*           * @return 生成的密钥* @throws java.lang.Exception*/public static String BPMMD5(String str){try {EncryptionDecryption des = new EncryptionDecryption();// 自定义密钥str= EncryptionDecryption.encrypt(str);System.out.println(str);} catch (Exception e) {e.printStackTrace();}return str;}}

JAVA通过Cipher实现加密与解密相关推荐

  1. java的BASE64Encoder,BASE64Decoder加密与解密

    https://blog.csdn.net/weixin_44876457/article/details/89102723 https://blog.csdn.net/weixin_44876457 ...

  2. Java工具类——DES加密和解密工具 I

    可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. package com.app; import java.security.Key; import java.security.Sec ...

  3. java中md5加密和解密_如何在java中实现md5加密和解密

    如何在java中实现md5加密和解密 关注:273  答案:1  mip版 解决时间 2021-01-19 20:37 提问者精神疯裂 2021-01-19 05:36 如何在java中实现md5加密 ...

  4. Java代码:字符串加密与解密

    Java代码:字符串加密与解密 获取字符串的长度length() 把字符串转为字节数组getBytes() 字节数组转换为字符串String(b) /* *java代码:字符串加密与解密 **/ pa ...

  5. Java中的AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  6. Java课程设计——文本文件加密与解密软件设计与实现

    源文件链接: Java文本文件加密与解密-其它文档类资源-CSDN文库 摘要 随着现代网络技术的飞速发展,人们的个人信息.文件传递以及电子商务等方面都需要大力的保护,文件加密技术也应运而生.本次使用J ...

  7. javax.crypto.Cipher类--加密和解密

    javax.crypto.Cipher类提供加密和解密功能. 一.获得Cipher对象 通过调用Cipher类中的getInstance静态工厂方法得到Cipher对象. public static ...

  8. Java中常用的加密与解密

    一.对称加密与非对称加密 1.对称加密 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困 ...

  9. Java开发中的加密、解密、签名、验签,密钥,证书,这篇就够了,赶紧收藏起来

    OpenSSL和keytool 先说一下两个重要的工具 OpenSSL:OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库libssl.应用程序命令工具以及密码算法库libcrypt ...

最新文章

  1. IT巨头混战平板市场三大系统争霸格局初现
  2. windows fromdatagrid双击行或者行的内容_一些提升windows办公,编写代码的神器 carnac,Total commander...
  3. ubuntu上安装rsync+sersync
  4. SPSS统计分析学习记录
  5. 不管是蓝牙耳机还是有线耳机长时间佩戴都是有危害的,这些问题不容小觑!
  6. windows系统上安装与使用Android NDK r5
  7. java put方式提交_java – 通过HTTP PUT请求上传文件
  8. exceptions - Pitfall: the Lost Exception
  9. 『ABP』ABP vNext中使用开源日志面板 LogDashboard
  10. 为什么网上都说 AirPods 3 音质不如AirPods Pro?
  11. 《火车头采集器采集网页数据》火车头配置规则采集信息文章数据。
  12. 写了一个计算利息和还款计划的html小工具
  13. 【C++训练】 一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹.求它在第N次落地时共经过多少米?
  14. 【数据结构】— 『队列』的实现以及LeetCode队列练习题
  15. “衡水中学模式”深度解析
  16. (笔记)第一章:零基础入门深度学习
  17. 最新动态 | 合宙MCU新品即将发布,LuatOS-SoC软硬件齐发力
  18. android网上订餐项目相关配置
  19. ctfshow---vip限免题目1~10关
  20. 手机忘记密码解锁的 6 大软件方法

热门文章

  1. 普通本科校招拿下2个Java研发岗offer,薪资分别是16K,17K
  2. 绘图程序android,android canvas c++ 绘图
  3. 电子信息工程专业毕设选题大全
  4. 3分钟告诉你,智能弱电为啥要学云计算!
  5. android下保存图片到mySQL_android将图片保存进数据库
  6. 检查xml格式的linux自带方便好用的工具
  7. 共同探讨软件发展之路 ---- 软件领域十大命题
  8. java泛解析_域名解析和域名泛解析
  9. dell t40 固态系统盘_固态攻坚战——戴尔 DELL N4050升级固态硬盘教程
  10. php smarty 视频教程,传智播客PHP2015-smarty视频教程