﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-DZM.528-随笔分类-Java Security</title><link>http://www.blogjava.net/duanzhimin528/category/45404.html</link><description>Life is a voyage, not a destination.</description><language>zh-cn</language><lastBuildDate>Tue, 27 Jul 2010 04:42:24 GMT</lastBuildDate><pubDate>Tue, 27 Jul 2010 04:42:24 GMT</pubDate><ttl>60</ttl><item><title>生成证书命令keytool</title><link>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324197.html</link><dc:creator>DZM.528</dc:creator><author>DZM.528</author><pubDate>Tue, 22 Jun 2010 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324197.html</guid><wfw:comment>http://www.blogjava.net/duanzhimin528/comments/324197.html</wfw:comment><comments>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duanzhimin528/comments/commentRss/324197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duanzhimin528/services/trackbacks/324197.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 创建证书<br>1.服务器中生成证书：(注：生成证书时，CN要和服务器的域名相同，如果在本地测试，则使用localhost)<br>keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit&nbsp;&nbsp;<a href='http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324197.html'>阅读全文</a><img src ="http://www.blogjava.net/duanzhimin528/aggbug/324197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duanzhimin528/" target="_blank">DZM.528</a> 2010-06-22 18:01 <a href="http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Keytool和OpenSSL生成和签发数字证书</title><link>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324182.html</link><dc:creator>DZM.528</dc:creator><author>DZM.528</author><pubDate>Tue, 22 Jun 2010 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324182.html</guid><wfw:comment>http://www.blogjava.net/duanzhimin528/comments/324182.html</wfw:comment><comments>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duanzhimin528/comments/commentRss/324182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duanzhimin528/services/trackbacks/324182.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一）keytool生成私钥文件(.key)和签名请求文件(.csr)，openssl签发数字证书; 二）openssl生成私钥文件(.key)和签名请求文件(.csr)，以及签发数字证书;&nbsp;&nbsp;<a href='http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324182.html'>阅读全文</a><img src ="http://www.blogjava.net/duanzhimin528/aggbug/324182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duanzhimin528/" target="_blank">DZM.528</a> 2010-06-22 15:51 <a href="http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java安全方面的一些缩写词(Java Security Abbreviation)</title><link>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324178.html</link><dc:creator>DZM.528</dc:creator><author>DZM.528</author><pubDate>Tue, 22 Jun 2010 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324178.html</guid><wfw:comment>http://www.blogjava.net/duanzhimin528/comments/324178.html</wfw:comment><comments>http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duanzhimin528/comments/commentRss/324178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duanzhimin528/services/trackbacks/324178.html</trackback:ping><description><![CDATA[
		<pre>
				<br />
				<font color="#ff0000">CDA</font>，Combined DDA/Application Cryptogram Generation复合数据认证/应用密文生成<br /><font color="#ff0000">DDA</font>，Dynamic Data Authentication动态数据认证<br /><font color="#ff0000">SDA</font>，Static Data Authentication 静态数据认证<br /><font color="#ff0000">DES</font>，Data Encryption Standard 数据加密标准，国内还是叫DES<br /><font color="#ff0000">SHA1</font>，Secure Hash Algorithm 1安全哈希散列算法1，有1当然还有128，1046之类的咯<br /><font color="#ff0000">RSA</font>，Rivest, Shamir, Adleman Algorithm几个人名命名的非对称算法，没有中文，称RSA<br /><font color="#ff0000">MD5</font>，Message Digest 5消息 (报文也可以)摘要算法5，有5，当然有4<br /><font color="#ff0000">IDEA</font>，International Data Encryption Algorithm国际数据加密算法<br /></pre>
<img src ="http://www.blogjava.net/duanzhimin528/aggbug/324178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duanzhimin528/" target="_blank">DZM.528</a> 2010-06-22 15:36 <a href="http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MD5/Base64加密算法</title><link>http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322007.html</link><dc:creator>DZM.528</dc:creator><author>DZM.528</author><pubDate>Thu, 27 May 2010 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322007.html</guid><wfw:comment>http://www.blogjava.net/duanzhimin528/comments/322007.html</wfw:comment><comments>http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duanzhimin528/comments/commentRss/322007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duanzhimin528/services/trackbacks/322007.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: MD5算法是一种单向的加密算法，而Base64是双向的加密算法&nbsp;&nbsp;<a href='http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322007.html'>阅读全文</a><img src ="http://www.blogjava.net/duanzhimin528/aggbug/322007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duanzhimin528/" target="_blank">DZM.528</a> 2010-05-27 12:15 <a href="http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DES加密、解密字符串算法(java版)</title><link>http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322005.html</link><dc:creator>DZM.528</dc:creator><author>DZM.528</author><pubDate>Thu, 27 May 2010 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322005.html</guid><wfw:comment>http://www.blogjava.net/duanzhimin528/comments/322005.html</wfw:comment><comments>http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duanzhimin528/comments/commentRss/322005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duanzhimin528/services/trackbacks/322005.html</trackback:ping><description><![CDATA[DESPlus.java<br /><br />/**<br /> * @author    李国庆<br /> * @company   leemenz (C) copyright<br /> * @time      Nov 1, 2006  10:18:41 AM<br /> * @version   1.0.0.0<br /> * @package   com.des<br /> */<br />package com.des;<br /><br />import java.security.*;<br />import javax.crypto.*;<br /><br />public class DESPlus {<br /> private static String strDefaultKey = "national";<br /><br /> private Cipher encryptCipher = null;<br /><br /> private Cipher decryptCipher = null;<br /><br /> /**<br />  * 将byte数组转换为表示16进制值的字符串， 如：byte[]{8,18}转换为：0813， 和public static byte[]<br />  * hexStr2ByteArr(String strIn) 互为可逆的转换过程<br />  * <br />  * @param arrB<br />  *            需要转换的byte数组<br />  * @return 转换后的字符串<br />  * @throws Exception<br />  *             本方法不处理任何异常，所有异常全部抛出<br />  */<br /> public static String byteArr2HexStr(byte[] arrB) throws Exception {<br />  int iLen = arrB.length;<br />  // 每个byte用两个字符才能表示，所以字符串的长度是数组长度的两倍<br />  StringBuffer sb = new StringBuffer(iLen * 2);<br />  for (int i = 0; i &lt; iLen; i++) {<br />   int intTmp = arrB[i];<br />   // 把负数转换为正数<br />   while (intTmp &lt; 0) {<br />    intTmp = intTmp + 256;<br />   }<br />   // 小于0F的数需要在前面补0<br />   if (intTmp &lt; 16) {<br />    sb.append("0");<br />   }<br />   sb.append(Integer.toString(intTmp, 16));<br />  }<br />  return sb.toString();<br /> }<br /><br /> /**<br />  * 将表示16进制值的字符串转换为byte数组， 和public static String byteArr2HexStr(byte[] arrB)<br />  * 互为可逆的转换过程<br />  * <br />  * @param strIn<br />  *            需要转换的字符串<br />  * @return 转换后的byte数组<br />  * @throws Exception<br />  *             本方法不处理任何异常，所有异常全部抛出<br />  * @author &lt;a href="mailto:leo841001@163.com"&gt;LiGuoQing&lt;/a&gt;<br />  */<br /> public static byte[] hexStr2ByteArr(String strIn) throws Exception {<br />  byte[] arrB = strIn.getBytes();<br />  int iLen = arrB.length;<br /><br />  // 两个字符表示一个字节，所以字节数组长度是字符串长度除以2<br />  byte[] arrOut = new byte[iLen / 2];<br />  for (int i = 0; i &lt; iLen; i = i + 2) {<br />   String strTmp = new String(arrB, i, 2);<br />   arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);<br />  }<br />  return arrOut;<br /> }<br /><br /> /**<br />  * 默认构造方法，使用默认密钥<br />  * <br />  * @throws Exception<br />  */<br /> public DESPlus() throws Exception {<br />  this(strDefaultKey);<br /> }<br /><br /> /**<br />  * 指定密钥构造方法<br />  * <br />  * @param strKey<br />  *            指定的密钥<br />  * @throws Exception<br />  */<br /> public DESPlus(String strKey) throws Exception {<br />  Security.addProvider(new com.sun.crypto.provider.SunJCE());<br />  Key key = getKey(strKey.getBytes());<br /><br />  encryptCipher = Cipher.getInstance("DES");<br />  encryptCipher.init(Cipher.ENCRYPT_MODE, key);<br /><br />  decryptCipher = Cipher.getInstance("DES");<br />  decryptCipher.init(Cipher.DECRYPT_MODE, key);<br /> }<br /><br /> /**<br />  * 加密字节数组<br />  * <br />  * @param arrB<br />  *            需加密的字节数组<br />  * @return 加密后的字节数组<br />  * @throws Exception<br />  */<br /> public byte[] encrypt(byte[] arrB) throws Exception {<br />  return encryptCipher.doFinal(arrB);<br /> }<br /><br /> /**<br />  * 加密字符串<br />  * <br />  * @param strIn<br />  *            需加密的字符串<br />  * @return 加密后的字符串<br />  * @throws Exception<br />  */<br /> public String encrypt(String strIn) throws Exception {<br />  return byteArr2HexStr(encrypt(strIn.getBytes()));<br /> }<br /><br /> /**<br />  * 解密字节数组<br />  * <br />  * @param arrB<br />  *            需解密的字节数组<br />  * @return 解密后的字节数组<br />  * @throws Exception<br />  */<br /> public byte[] decrypt(byte[] arrB) throws Exception {<br />  return decryptCipher.doFinal(arrB);<br /> }<br /><br /> /**<br />  * 解密字符串<br />  * <br />  * @param strIn<br />  *            需解密的字符串<br />  * @return 解密后的字符串<br />  * @throws Exception<br />  */<br /> public String decrypt(String strIn) throws Exception {<br />  return new String(decrypt(hexStr2ByteArr(strIn)));<br /> }<br /><br /> /**<br />  * 从指定字符串生成密钥，密钥所需的字节数组长度为8位 不足8位时后面补0，超出8位只取前8位<br />  * <br />  * @param arrBTmp<br />  *            构成该字符串的字节数组<br />  * @return 生成的密钥<br />  * @throws java.lang.Exception<br />  */<br /> private Key getKey(byte[] arrBTmp) throws Exception {<br />  // 创建一个空的8位字节数组（默认值为0）<br />  byte[] arrB = new byte[8];<br /><br />  // 将原始字节数组转换为8位<br />  for (int i = 0; i &lt; arrBTmp.length &amp;&amp; i &lt; arrB.length; i++) {<br />   arrB[i] = arrBTmp[i];<br />  }<br /><br />  // 生成密钥<br />  Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");<br /><br />  return key;<br /> }<br />}<br /><br />测试程序  Test.java<br /><br />/**<br /> * @author    李国庆<br /> * @company   leemenz (C) copyright<br /> * @time      Nov 1, 2006  10:24:06 AM<br /> * @version   1.0.0.0<br /> * @package   com.des<br /> */<br />package com.des;<br /><br />/**<br /> * @author Administrator<br /> *<br /> */<br />public class Test {<br /><br /> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO Auto-generated method stub<br />  try {<br />   String test = "Hellow Word!";<br />   //DESPlus des = new DESPlus();//默认密钥<br />   DESPlus des = new DESPlus("leemenz");//自定义密钥<br />   System.out.println("加密前的字符："+test);<br />   System.out.println("加密后的字符："+des.encrypt(test));<br />   System.out.println("解密后的字符："+des.decrypt(des.encrypt(test)));<br />  } catch (Exception e) {<br />   // TODO: handle exception<br />   e.printStackTrace();<br />  }<br /> }<br />}<br /><br /><img src ="http://www.blogjava.net/duanzhimin528/aggbug/322005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duanzhimin528/" target="_blank">DZM.528</a> 2010-05-27 12:06 <a href="http://www.blogjava.net/duanzhimin528/archive/2010/05/27/322005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>