java DES加密解密
来源:互联网 发布:淘宝新店做什么活动 编辑:程序博客网 时间:2024/05/02 15:49
(1)算法的独立性和可靠性。
(2)实现的独立性和相互作用性。
算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器。Java运行环境Sun版本时, 提供一个缺省的提供器Sun。
DES算法简介
DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法工作流程如下:若Mode为加密模式,则利用Key 对数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密模式,则利用Key对密码形式的数据Data进行解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据在公共通信网中传输的安全性和可靠性。
也可以通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性。
import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; /** * DES加密解密工具类 * @author Front.Tang [Front.Tang@qq.com] * @version 2012-5-14 上午09:32:43 */ public class DESEncrypt { private static final String PASSWORD_CRYPT_KEY = "Front.Tang"; private static final String DES = "DES"; /** * DES加密 * @param src 要加密的数据 * @param key 加密取用的key。八位字符串 * @return * @throws Exception */ public static String encrypt(String src, String key){ if(key==null||key.length()==0) { key = PASSWORD_CRYPT_KEY; } byte bb[] = null; String result = null; try { Cipher cipher = getCipher(Cipher.ENCRYPT_MODE,key); // 正式执行加密操作 bb = cipher.doFinal(src.getBytes()); result = Byte2Hex(bb); } catch(Exception e) { result = null; } return result; } /** * DES解密 * @param src 要解密的数据源 * @param key 加密时取用的key,八位字符串 * @return * @throws Exception */ public static String decrypt(String src, String key) { if(key==null||key.length()==0) { key = PASSWORD_CRYPT_KEY; } byte[] result = null; Cipher cipher = null; try { result = String2Byte(src); cipher = getCipher(Cipher.DECRYPT_MODE,key); // 现在,获取数据并解密 // 正式执行解密操作 return new String(cipher.doFinal(result)); } catch(Exception e) { return null; } } /** * 根据 mode 和 key 初始化Cipher对象 * @param mode 加密还是解密 * @param key 密匙 * @return Cipher对象 * @throws Exception */ public static Cipher getCipher(int mode,String key) throws Exception { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密匙数据创建一个DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key.getBytes()); // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成 // 一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher对象 cipher.init(mode, securekey, sr); return cipher; } /** * 将byte[] 转成 hex 字符串 * @param bb byte数组 * @return */ public static String Byte2Hex(byte[] bb) { StringBuilder buff = new StringBuilder(bb.length); String sTemp; for(int i=0;i<bb.length;i++){ sTemp = Integer.toHexString(0xFF &bb[i]); if(sTemp.length()<2){ buff.append(0); } buff.append(sTemp.toUpperCase()); } return buff.toString(); } /** * 字符串转换成byte[] * @param src 要转换的字符串 * @return */ public static byte[] String2Byte(String src) { int len = (src.length()/2); byte [] result = new byte[len]; char[] achar = src.toString().toCharArray(); for(int j=0;j<len;j++){ int pos = j*2; result[j]= ((byte)(Char2Byte(achar[pos])<<4|Char2Byte(achar[pos+1]))); } return result; } /** * 字符转成byte * @param c * @return */ private static byte Char2Byte(char c){ byte b = (byte)"0123456789ABCDEF".indexOf(c); return b; } public static void main(String[] args) throws Exception { System.out.println(encrypt("Front.Tang",PASSWORD_CRYPT_KEY)); System.out.println(decrypt("A7F816CFE0A431F921A2812309EB95A2", PASSWORD_CRYPT_KEY)); } }
- java--des加密解密
- java DES加密解密
- java DES加密解密
- java DES加密解密
- Java DES加密解密
- Java DES 加密解密
- java DES加密解密
- java DES加密解密
- JAVA DES加密解密
- JAVA DES加密解密
- java des加密解密
- Java加密解密算法-DES加密解密
- java Des加密与解密
- Java中DES加密解密
- Java DES 加密解密 实例
- DES加密解密类-java
- java DES 加密解密DEMO
- Java 实现DES加密解密
- VS使用
- 《Windows程序设计》之剪贴板查看器
- SQL性能分析工具
- 硬链接与软链接
- 在sqlserver 2008上配置操作员 设置警报 启用数据库邮件
- java DES加密解密
- Building a Jabber Client for iOS: Server Setup
- C#为txt文件追加文字并换行
- 关于对J2EE几点误解和错误认识的澄清
- Android五子棋棋盘的绘制
- 细节-查找问题基本途径
- Abap/4 面向对象语法(1)
- Abap/4 面向对象语法(2)
- oracle中adump, bdump, dpdump, udump目录中一些内容的作用