这两天一直在查找字节数组之类的问题,今天正好有机会和大家共享一下.

package com.wf.security;import java.security.Key;
import java.security.Security;import javax.crypto.Cipher;/*** 加密密解类* @author wangfeng* @since 2013-4-27 15:50:26* @version 1.0**/
public class EncryptionDecryption {private static String strDefaultKey = "wfkey";/** 加密具工 */private Cipher encryptCipher = null;/** 密解具工 */private Cipher decryptCipher = null;/*** 将byte数组转换为表现16进制的字符串* @param arrB 须要转换的byte数组* @return 16进制表现的字符串* @throws Exception*/public static String byteArr2HexStr(byte[] arrB) throws Exception{int bLen = arrB.length;//每一个字符占用两个字节,所以字符串的度长需是数组度长的2倍StringBuffer strBuffer = new StringBuffer(bLen*2);for(int i=0; i != bLen; ++i){int intTmp = arrB[i];//把正数转化为正数while(intTmp < 0){intTmp = intTmp + 256;//因为字一个字节是8位,从低往高数,第9位为符号为,加256,相当于在第九位加1}//小于0F的数据须要在后面补0,(因为原来是一个字节,在现成变String是两个字节,如果小于0F的话,明说大最也盛不满第一个字节。第二个需弥补0)if(intTmp < 16){strBuffer.append("0");}strBuffer.append(Integer.toString(intTmp,16));}return strBuffer.toString();}/*** 将表现16进制的字符串转化为byte数组* @param hexStr* @return* @throws Exception*/public static byte[] hexStr2ByteArr(String hexStr) throws Exception{byte[] arrB = hexStr.getBytes();int bLen = arrB.length;byte[] arrOut = new byte[bLen/2];for(int i=0; i<bLen; 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*/@SuppressWarnings("restriction")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 byte[] encrypt(byte[] arrB) throws Exception{return encryptCipher.doFinal(arrB);}/*** 加密字符串* @param strIn 需加密的字符串* @return 加密后的字符串* @throws Exception*/public String encrypt(String strIn) throws Exception{return byteArr2HexStr(encrypt(strIn.getBytes()));}/*** 密解字节数组* @param arrB 需密解的字节数组* @return 密解后的字节数组* @throws Exception*/public byte[] decrypt(byte[] arrB) throws Exception{return decryptCipher.doFinal(arrB);}/*** 密解字符串* @param strIn 需密解的字符串* @return 密解后的字符串* @throws Exception*/public 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 Exception*/private Key getKey(byte[] arrBTmp) throws Exception{byte[] arrB = new byte[8]; //认默为0for(int i=0; i<arrBTmp.length && i < arrB.length; ++i){arrB[i] = arrBTmp[i];}//生成密匙Key key = new javax.crypto.spec.SecretKeySpec(arrB,"DES");return key;}}
每日一道理
岭上娇艳的鲜花,怎敌她美丽的容颜?山间清澈的小溪,怎比她纯洁的心灵?

这里用DES算法,SUN还供提了别的算法。这里只是其中一种。

测试代码:

package com.wf.test;import org.junit.Test;import com.wf.security.EncryptionDecryption;public class EncryptionTest {@Testpublic void test() throws Exception{EncryptionDecryption des = new EncryptionDecryption("wf");String oldStr = "wangfeng";String newStr = "";newStr = des.encrypt(oldStr);System.out.println("加密后:   "+newStr);oldStr = "";//楚清老数据oldStr = des.decrypt(newStr);System.out.println("密解后:  "+oldStr);}
}

输出信息:

加密后:   d59c46653b72a6248e03aa55a8fdad6c
密解后:  wangfeng

文章结束给大家分享下程序员的一些笑话语录: 关于编程语言
如果 C++是一把锤子的话,那么编程就会变成大手指头。
如果你找了一百万只猴子来敲打一百万个键盘,那么会有一只猴子会敲出一 段 Java 程序,而其余的只会敲出 Perl 程序。
一阵急促的敲门声,“谁啊!”,过了 5 分钟,门外传来“Java”。
如果说 Java 很不错是因为它可以运行在所有的操作系统上,那么就可以说 肛交很不错,因为其可以使用于所有的性别上。

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/28/3049893.html

字节数组java加密与解密相关推荐

  1. Java加密与解密的艺术~AES-GCM-NoPadding实现

    来源:Java AES加密和解密_一名可爱的技术搬运工-CSDN博客 高级加密标准 (AES,Rijndael)是一种分组密码加密和解密算法,是全球使用最广泛的加密算法. AES使用128.192或2 ...

  2. java加密与解密-核心包中的部分API(2)

    主要是介绍java安全框架的核心包中的部分API作用 java.Security包 ​ java.security包主要用于为安全框架提供类和接口 Provider类 Provider类实现了java ...

  3. 安全系列之——手写JAVA加密、解密

    其他文章: 安全系列之--手写JAVA加密.解密 安全系列之--数据传输的完整性.私密性.源认证.不可否认性 安全系列之--主流Hash散列算法介绍和使用 安全系列之--RSA的公钥私钥有多少人能分的 ...

  4. Java加密与解密笔记(三) 非对称加密

    非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...

  5. 安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》

    <Java加密与解密的艺术>中文 PDF版 :https://www.jb51.net/books/65048.html 1. 密码学应用 :https://www.bilibili.co ...

  6. 将图片文件通过byte[]字节数组Base64加密后给前端显示

    问题描述:把图片上传到服务器,拿到url地址后把url地址给前端,该url地址可以直接获取到图片文件的字节数组进行base64加密后的字符串(data) 解决方法: //将图片转化为字节数组 byte ...

  7. Java加密与解密笔记(四) 高级应用

    术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...

  8. java加密与解密工具_cat: CAT,全称Cryptographic Algorithm Tool,是一款小巧的Java加密与解密算法调用工具包...

    cat 一.介绍 cat:全称Cryptographic Algorithm Tool 主要提供以下加密算法调用: 1.AES 2.DES 3.DSA 4.MD5 5.MersenneTwister( ...

  9. java解密方法,java加密,解密方法

    /** *AES加密解密工具类 *@author M-Y */ public class AESUtil { private static Logger log = LoggerFactory.get ...

  10. java加密 c解密_java+加密解密

    EncrypAES public class EncrypAES { // KeyGenerator 提供对称密钥生成器的功能,支持各种算法 private KeyGenerator keygen; ...

最新文章

  1. 二维动画作品_「咻动画」二维动画制作中角色造型的设计要点
  2. 为html.EditorFor添加样式
  3. 基于知识库的自动问答:seq2seq模型实践
  4. 服务器租用的6大安全知识分析
  5. DDD实战进阶第一波(七):开发一般业务的大健康行业直销系统(实现产品上下文接口与测试)...
  6. TCN机器之心的转载,后面需要实现
  7. 计算机445 135 139端口,关闭445 135 137 138 139端口方法图文教程
  8. 基因的entrez ID 跟symbol等其它ID的转换程序
  9. edoc2文档管理系统
  10. DRAM Devices Organization
  11. OEM、ODM、OBM分别是什么?
  12. 解决SQLServer2000安装被挂起的方法
  13. [学习笔记]后缀系列总结
  14. html5中图片热点,HTML5 创建热点图
  15. FPGA实现信号n倍插值(内插0)
  16. android 手机存储大小设置,安卓手机怎么设置增加虚拟内存
  17. PS做文字特效nbsp;
  18. 用网页打开本地exe程序
  19. html热点区域确定坐标,html图片热点连接区域上的坐标是如何定位的?
  20. Java实现递归 斐波那契数列 阶乘

热门文章

  1. TrueCrypt编译记录
  2. 将日期转换成大写例如:二零一三年十二月
  3. 2022年微信小程序源码130个分享
  4. 检测到非法调试,F12被管理员禁用解决方法
  5. 安装centos 6.5 在惠普 ...pro(有惠普增霸卡)上的诸些问题
  6. 数字盲打怎么练_键盘上的数字键怎么练才能盲打?
  7. dell服务器管理口ip地址_戴尔服务器IDRAC命令配置IP地址
  8. Java爬虫入门程序
  9. fortran快速入门
  10. Axure 9 实战案例,动态面板的应用 3,京东的拖动拼图登录验证