- 浏览: 596260 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Des对称加密,是一种对称加密算法。
import java.security.Key; import java.security.Security; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; /** * DES 加密方法 * * @author silence * */ public class HTest { private static String strDefaultKey = "national"; private Cipher encryptCipher = null; private 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) { 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的数需要在前面补0 if (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数组 */ public static byte[] hexStr2ByteArr(String strIn) { byte[] arrB = strIn.getBytes(); int iLen = arrB.length; // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2 byte[] 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 HTest() throws Exception { this(strDefaultKey); } /** * 指定密钥构造方法 * * @param strKey * 指定的密钥 * @throws Exception */ public HTest(String strKey) { Security.addProvider(new com.sun.crypto.provider.SunJCE()); Key key; try { key = getKey(strKey.getBytes()); encryptCipher = Cipher.getInstance("DES"); encryptCipher.init(Cipher.ENCRYPT_MODE, key); decryptCipher = Cipher.getInstance("DES"); decryptCipher.init(Cipher.DECRYPT_MODE, key); } catch (Exception e) { e.printStackTrace(); } } /** * 加密字节数组 */ public byte[] encrypt(byte[] arrB) { byte[] s = null; try { s = encryptCipher.doFinal(arrB); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return s; } /** * 将启动码strIn加密,返回加密后的启动码 */ public String encrypt(String strIn) { return byteArr2HexStr(encrypt(strIn.getBytes())); } /** * 解密字节数组 */ public byte[] decrypt(byte[] arrB) { byte[] s = null; try { s = decryptCipher.doFinal(arrB); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return s; } /** * 解密 strIn */ public String decrypt(String strIn) { return new String(decrypt(hexStr2ByteArr(strIn))); } /** * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位 * * @param arrBTmp * 构成该字符串的字节数组 * @return 生成的密钥 * @throws java.lang.Exception */ private Key getKey(byte[] arrBTmp) { // 创建一个空的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, "DES"); return key; } public static void main(String[] args) { try { String test = "理智"; // 自定义密钥 HTest des = new HTest("www"); System.out.println("加密前的字符:" + test); System.out.println("加密后的字符:" + des.encrypt(test)); System.out.println("解密后的字符:" + des.decrypt(des.encrypt(test))); } catch (Exception e) { e.printStackTrace(); } } };
import java.io.RandomAccessFile; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; public class DESUtil { public static String strEncode; public static final int[] A = { 31, -42, 53, -64, 75, -86, 97, -108 }; private static final String keyStr = "LONGTOP.COM.CDWEI"; private static void saveFile(byte[] strcont, String filename) throws Exception { RandomAccessFile infile = null; try { infile = new RandomAccessFile(filename, "rw"); infile.write(strcont); } catch (Exception e) { throw e; } finally { infile.close(); } } private static byte[] readFile(String strfilename) throws Exception { byte[] filecontent = null; int i_size = 0; RandomAccessFile infile = null; try { infile = new RandomAccessFile(strfilename, "rw"); i_size = (int)infile.length(); filecontent = new byte[i_size]; infile.read(filecontent, 0, i_size); } catch (Exception e) { throw e; } finally { infile.close(); } return filecontent; } private static void getKeyFile() throws Exception { SecureRandom sr = new SecureRandom(); KeyGenerator kg = KeyGenerator.getInstance("DES"); kg.init(sr); SecretKey key = kg.generateKey(); byte[] rawKeyData = key.getEncoded(); saveFile(rawKeyData, "deskeyfile"); } public static boolean isAsCII(char ch1, int iLength) { int iLevel = 0; int ch = 0; ch = ch1; do { ch += iLength; if (ch < 0) ch += 256; if (ch > 256) ch -= 256; iLevel++; }while ((ch < 33) || (ch > 126)); temp.iLength = iLevel; temp.ch = String.valueOf(ch); return true; } public static boolean isAsCII_DeCode(char ch1, int iLength, char iFlag) { int ch = 0; ch = ch1; do { ch += iLength * Integer.parseInt(String.valueOf(iFlag)); if (ch < 0) ch += 256; if (ch > 256) ch -= 256; } while ((ch < 0) || (ch > 256)); temp.ch = String.valueOf(ch); return true; } public static String pwdEncode(String strsrc) { strsrc = strsrc.trim(); StringBuffer strBufSrc = new StringBuffer(""); StringBuffer strBufFlag = new StringBuffer(""); if (strsrc.equals("")) { return ""; } for (int i = 0; i < strsrc.length(); i++) { if (isAsCII(strsrc.charAt(i), A[i])) { strBufSrc.append(String.valueOf((char)Integer.parseInt(temp.ch))); strBufFlag.append(String.valueOf(temp.iLength)); } } strEncode = strBufFlag.toString().trim(); return strBufSrc.toString(); } public static String pwdDecode(String strsrc, String strFlag) { strsrc = strsrc.trim(); strFlag = strFlag.trim(); StringBuffer strBuf = new StringBuffer(""); int tmpvalue = 0; if (strsrc.equals("")) { return ""; } if (strsrc.length() != strFlag.length()) { return "长度不一样,该串不能解码!"; } for (int i = 0; i < strsrc.length(); i++) { tmpvalue = strsrc.charAt(i) - A[i] * Integer.parseInt(String.valueOf(strFlag.charAt(i))); if (tmpvalue > 0) tmpvalue %= 256; else if (tmpvalue < 0) { tmpvalue = 256 - Math.abs(tmpvalue) % 256; } strBuf.append(String.valueOf((char)tmpvalue)); } return strBuf.toString(); } public static byte[] encode(byte[] data) throws Exception { if ((data == null) || (data.length == 0)) { return data; } SecureRandom sr = new SecureRandom(); byte[] rawKeyData = "LONGTOP.COM.CDWEI".getBytes(); DESKeySpec dks = new DESKeySpec(rawKeyData); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance("DES"); cipher.init(1, key, sr); byte[] encryptedData = cipher.doFinal(data); return encryptedData; } public static byte[] decode(byte[] encryptedData) throws Exception { if ((encryptedData == null) || (encryptedData.length == 0)) { return encryptedData; } SecureRandom sr = new SecureRandom(); byte[] rawKeyData = "LONGTOP.COM.CDWEI".getBytes(); DESKeySpec dks = new DESKeySpec(rawKeyData); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance("DES"); cipher.init(2, key, sr); byte[] decryptedData = cipher.doFinal(encryptedData); return decryptedData; } }
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1226在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 944java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 640(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 981server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1695在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 476/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1611REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 11601.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1611如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 649传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4901.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2431MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1773java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1085Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 429import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 665CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 3171、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2145import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7851.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 580注意事项hibernate配置文件必须设置自动提交否则不能插入 ...
相关推荐
主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
用java 编写的一个DES加密文本文档的小程序 希望对大家有用 含有源代码
Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...
### DES加密算法JAVA代码知识点详解 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称密钥加密技术。在Java中实现DES加密解密功能通常涉及以下几个关键类:`javax.crypto....
用java代码实现DES的加密功能,简单的java类,含有加密和解密
本DEMO提供了C#和JAVA两种编程语言下的DES加密和解密实现,这对于理解DES算法及其在实际开发中的应用非常有帮助。 1. **DES算法原理** - **结构**:DES算法基于Feistel网络,它将明文分为左右两半,通过一系列的...
然后,可以使用以下代码进行DES加密: ```javascript var CryptoJS = require("crypto-js"); function encryptDES(message, key) { var encrypted = CryptoJS.DES.encrypt(message, key, { mode: CryptoJS.mode....
标题中的"Des.JAVA.rar_DES.java_DES加密_java DES 128bit_java des_加密解密"表明这是一个关于Java实现DES(Data Encryption Standard)加密算法的压缩包,其中包含用于加密和解密的源代码。DES是一种对称加密算法...
### 利用DES加密算法保护Java源代码 #### 一、引言 随着信息技术的快速发展,数据的安全性问题越来越受到人们的重视。对于软件开发者来说,保护自己的Java源代码不被非法访问或篡改是非常重要的。Java作为一种跨...
这些文件可能是实现上述 JavaScript 示例的代码,`jsDES.html` 可能包含一个网页,用于展示 JavaScript 的 DES 加密功能,而 `js` 文件可能是 JavaScript 代码本身,实现加密逻辑。 总结,JavaScript 和 Java 通过 ...
本篇文章将详细探讨Java环境下如何实现3DES加密算法,并介绍相关知识点。 首先,让我们了解3DES的工作原理。3DES是对原始DES算法的扩展,它通过执行三次加密过程来提高安全性。简而言之,3DES分为两种模式:EDE...
DES加密方法JAVA和C#交叉加密解密代码
Java DES加密是一种在Java编程环境中实现的对称加密算法,主要用来保护数据的安全性。DES(Data Encryption Standard)是早期广泛使用的一种加密标准,虽然现在已经被更安全的AES(Advanced Encryption Standard)所...
java代码-使用java解决DES加密解密的源代码 ——学习参考资料:仅用于个人学习使用!
实现了Des字符串,加密解密,java版本的,java源代码
匹配博客:https://blog.csdn.net/qq_41739364/article/details/86775886
### Java与C++中DES加密不一致的问题及解决方案 #### 问题背景 在进行系统间的交互时,常常需要对敏感数据进行加密处理以确保数据的安全性。DES(Data Encryption Standard,数据加密标准)是一种广泛使用的对称...
在本文中,我们将深入探讨DES加密的原理以及如何在前端JavaScript和后端Java之间实现互通。 DES算法基于Feistel结构,它将明文分为左右两半进行迭代处理,通过64轮的加密过程将原始信息转化为密文。每个轮次包括一...
Java写的DES的一个类”表明了这个压缩包包含两个部分:一个是使用Delphi编程语言编写的用于执行DES(Data Encryption Standard)加密和解密的小程序,另一个是用Java实现的DES加密类。DES是一种广泛使用的对称加密...