java加密解密初探-DES
来源:互联网 发布:鬼脚七为什么离开淘宝 编辑:程序博客网 时间:2024/06/05 17:05
DES为对称加密算法。
KeyGenerator 秘钥生成器。
一、
首先说生成秘钥:
看下文代码字符串变量srandom 为我们生成SecureRandom时候传递的参数,此参数决定了接下来SecretKey 的值 keyGenerator.init的方法有多种 其中不传递SecureRandom时候会随机生成SecretKey,如果固定传递一个SecureRandom的话SecretKey也不会变,运行下面两段代码便知:
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");String srandom = "此字符串为我们生成秘钥时候给的一种随机"; SecureRandom sr = new SecureRandom(srandom .getBytes()); keyGenerator.init(56,sr); SecretKey secretKey = keyGenerator.generateKey(); System.out.println(new BASE64Encoder().encode(secretKey.getEncoded()) );
和
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");keyGenerator.init(56); SecretKey secretKey = keyGenerator.generateKey(); System.out.println(new BASE64Encoder().encode(secretKey.getEncoded()) );
二、
secretKey 就是我们所说的秘钥,加密和解密都用它。 我们常常把秘钥转换成字节数组便于传递。 或者有字节数组转成字符串便于我们能直接看到。 我们使用 sun.misc.BASE64Encoder 把字节数组转换成字符串。所以必须使用对应的类sun.misc.BASE64Decoder来逆转字符串为数组。
接下来看加密:
Cipher c = Cipher.getInstance(“DES”);
//Cipher.ENCRYPT_MODE 这个表示加密
c.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] b = c.doFinal(“我们需要加密的内容”.getBytes());
String text = new BASE64Encoder().encode(b);
System.out.println(“我们加密后的内容:”+text );
再看解密:
c.init(Cipher.DECRYPT_MODE, secretKey);
//text先由BASE64Decoder转成数组
byte[] cb = c.doFinal(new BASE64Decoder().decodeBuffer(text));
System.out.println(“解密后的字符串” + new String(cb));
加密解密结束。下面看下关联的一些类的使用:
每次加密和每次解密不会永远在一个方法里面,所以要求我们把解密的秘钥存储下来。秘钥是无法直接存储,我们往往会把秘钥转化为字节数组。然后可能(我说的是可能)再转化成字符串。这时候就会出现一个问题:怎么把字符串转换成SecretKey。我初接触java加密的时候看到网上很多地方都把加密解密写到一起(包括我上述的代码也是)不符合实际情况。这里要讲一下如果我们把秘钥转换成字符串后怎么再转回秘钥。
首先我们先把秘钥转成了字符串:
String mykey = new BASE64Encoder().encode(secretKey.getEncoded()) ;
然后利用DESKeySpec类和SecretKeyFactory 类还原SecretKey
DESKeySpec dsk = new DESKeySpec(new
BASE64Decoder().decodeBuffer(mykey));
SecretKeyFactory skf = SecretKeyFactory.getInstance(“DES”);
SecretKey mysecretKey = skf.generateSecret(dsk);
c.init(Cipher.DECRYPT_MODE, mysecretKey);
//text先由BASE64Decoder转成数组
byte[] cb = c.doFinal(new BASE64Decoder().decodeBuffer(text));
System.out.println(“解密后的字符串” + new String(cb));
结束。
- 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加密解密
- Java DES 加密解密 实例
- DES加密解密类-java
- java DES 加密解密DEMO
- Ljava.lang.String
- Bochs常用调试命令
- Android自定义ViewPager指示器
- 线程总结
- 如何设置tableview的头部视图的颜色
- java加密解密初探-DES
- SQL基础知识(二)
- sqlit使用
- Emiller的Nginx模块开发指南
- Attempt to write error length data
- java多态的理解
- git使用中常用命令汇总
- 2016"百度之星"-初赛(AstarRound2A)解题报告
- oracle.jdbc.driver.T4CConnection.unwrap(Ljava/lang/Class;)启动项目监听数据库表