﻿<?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-业精于勤荒于嬉，行成于思毁于随-随笔分类-工具案例积累</title><link>http://www.blogjava.net/produ/category/54809.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 28 May 2016 08:07:55 GMT</lastBuildDate><pubDate>Sat, 28 May 2016 08:07:55 GMT</pubDate><ttl>60</ttl><item><title>Java反编译工具</title><link>http://www.blogjava.net/produ/archive/2016/05/28/430691.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Sat, 28 May 2016 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2016/05/28/430691.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430691.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2016/05/28/430691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430691.html</trackback:ping><description><![CDATA[最近生产环境上的项目总是报一些不该出现的问题，调查跟踪很久也没发现问题，没办法，开始怀疑生产环境和测试环境的代码不一致，虽然这不该出现，但确实是一种可能。<br />方法比较简单，获取生产环境jar包，反编译之后和本地代码进行对比。从接触反编译工具以来，到写下这篇笔记，我一直是使用的jd-gui<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/jdgui.png" border="0" alt="" /><br /><br />直到今天，偏偏是我所需要的一个.class文件不能反编译，出现了如下的情况<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/internalerror.png" border="0" alt="" /><br /><br />很慌啊，竟然不能反编译，其他的.class文件却可以，真是伤心，无奈求助搜索引擎，发现了一款jd-gui的同类工具，但是却可以解决出现// INTERNAL ERROR//的问题，真是太棒了，赶紧贴出来<a href="https://github.com/deathmarine/Luyten">https://github.com/deathmarine/Luyten</a>&nbsp;<br /><br />有过比对才发现luyten的速度比jd-gui快很多，真是长江后浪推前浪，一代更比一代浪<br /><img src ="http://www.blogjava.net/produ/aggbug/430691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2016-05-28 12:36 <a href="http://www.blogjava.net/produ/archive/2016/05/28/430691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#对称加密算法Java实现</title><link>http://www.blogjava.net/produ/archive/2016/03/28/430629.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Mon, 28 Mar 2016 14:12:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2016/03/28/430629.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430629.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2016/03/28/430629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430629.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430629.html</trackback:ping><description><![CDATA[<div>最近因为业务需求，需要把一段C#编写的加密代码采用Java进行实现，在此记下我的实施过程和过程中碰到的一些问题以备后用。为了便于观察，只贴上C#源码中关键的部分：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;加密方法<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;param&nbsp;name=\"Source\"&gt;</span><span style="color: #008000; ">待加密的串</span><span style="color: #808080; ">&lt;/param&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">经过加密的串</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;Encrypto(<span style="color: #0000FF; ">string</span>&nbsp;Source)<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytIn&nbsp;=&nbsp;UTF8Encoding.UTF8.GetBytes(Source);<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;ms&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MemoryStream();<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.Key&nbsp;=&nbsp;GetLegalKey();<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.IV&nbsp;=&nbsp;GetLegalIV();<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建对称加密器对象<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">下面的控制台打印是我自己添加方便观察的</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("KeySize:"&nbsp;+&nbsp;mobjCryptoService.KeySize);<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("LegalKeySizes:"&nbsp;+&nbsp;mobjCryptoService.LegalKeySizes.Length);<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Mode:"+&nbsp;mobjCryptoService.Mode);<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Padding:"+mobjCryptoService.Padding);<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICryptoTransform&nbsp;encrypto&nbsp;=&nbsp;mobjCryptoService.CreateEncryptor();<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">定义将数据流链接到加密转换的流</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;CryptoStream&nbsp;cs&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CryptoStream(ms,&nbsp;encrypto,&nbsp;CryptoStreamMode.Write);<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.Write(bytIn,&nbsp;0,&nbsp;bytIn.Length);<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.FlushFinalBlock();<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ms.Close();<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytOut&nbsp;=&nbsp;ms.ToArray();<br /><span style="color: #008080; ">26</span>&nbsp;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Convert.ToBase64String(bytOut);<br /><span style="color: #008080; ">28</span>&nbsp;}<br /><span style="color: #008080; ">29</span>&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;解密方法<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;param&nbsp;name=\"Source\"&gt;</span><span style="color: #008000; ">待解密的串</span><span style="color: #808080; ">&lt;/param&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">经过解密的串</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;Decrypto(<span style="color: #0000FF; ">string</span>&nbsp;Source)<br /><span style="color: #008080; ">37</span>&nbsp;{<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytIn&nbsp;=&nbsp;Convert.FromBase64String(Source);<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;ms&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MemoryStream(bytIn,&nbsp;0,&nbsp;bytIn.Length);<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.Key&nbsp;=&nbsp;GetLegalKey();<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.IV&nbsp;=&nbsp;GetLegalIV();<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建对称解密器对象</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICryptoTransform&nbsp;encrypto&nbsp;=&nbsp;mobjCryptoService.CreateDecryptor();<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">定义将数据流链接到加密转换的流</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CryptoStream&nbsp;cs&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CryptoStream(ms,&nbsp;encrypto,&nbsp;CryptoStreamMode.Read);<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamReader&nbsp;sr&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StreamReader(cs);<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sr.ReadToEnd();<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception)<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">string</span>.Empty;<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">55</span>&nbsp;}</div><div><br />其中有一个问题：</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">生成加密器的对象由RijndaelManaged得来，那么这个RijndaelManaged对象是干嘛的？第三方的？原生的？</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;SymmetricAlgorithm&nbsp;mobjCryptoService&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RijndaelManaged();</div><br /><div>调查之后，好吧，它是一种对称加密算法（可以理解为在双方之间可以实现加解密），以下来自百科：</div><div>高级加密标准（英语：Advanced Encryption Standard，缩写：AES），在密码学中又称Rijndael加密法，是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES，已经被多方分析且广为全世界所使用。经过五年的甄选流程，高级加密标准由美国国家标准与技术研究院（NIST）于2001年11月26日发布于FIPS PUB 197，并在2002年5月26日成为有效的标准。2006年，高级加密标准已然成为对称密钥加密中最流行的算法之一。</div><div>&#8230;</div><div>之前对加密标准认识的并不多，但是通过代码来看，似乎实现对称加密还需要别的材料，看到下面这两个方法</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获得密钥<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">密钥</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;GetLegalKey()<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;_TempKey&nbsp;=&nbsp;Key;<span style="color: #008000; ">//</span><span style="color: #008000; ">Key已经预先写死在代码里了</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.GenerateKey();<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytTemp&nbsp;=&nbsp;mobjCryptoService.Key;<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;KeyLength&nbsp;=&nbsp;bytTemp.Length;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempKey.Length&nbsp;&gt;&nbsp;KeyLength)<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempKey&nbsp;=&nbsp;_TempKey.Substring(0,&nbsp;KeyLength);<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempKey.Length&nbsp;&lt;&nbsp;KeyLength)<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempKey&nbsp;=&nbsp;_TempKey.PadRight(KeyLength,&nbsp;'&nbsp;');<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ASCIIEncoding.ASCII.GetBytes(_TempKey);<br /><span style="color: #008080; ">16</span>&nbsp;}<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">GetLegalKey方法每次都会返回一个长度为32的byte数组<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">mobjCryptoService.Key&nbsp;=&nbsp;GetLegalKey();</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span><br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获得初始向量IV<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">初试向量IV</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;GetLegalIV()<br /><span style="color: #008080; ">25</span>&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;_TempIV&nbsp;=&nbsp;"$%^&amp;*()_osudghwe7%%2kdijskldglk2397^&amp;*wigwuqwelkn";<span style="color: #008000; ">//</span><span style="color: #008000; ">这是虚构的</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.GenerateIV();<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytTemp&nbsp;=&nbsp;mobjCryptoService.IV;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;IVLength&nbsp;=&nbsp;bytTemp.Length;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempIV.Length&nbsp;&gt;&nbsp;IVLength)<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempIV&nbsp;=&nbsp;_TempIV.Substring(0,&nbsp;IVLength);<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempIV.Length&nbsp;&lt;&nbsp;IVLength)<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempIV&nbsp;=&nbsp;_TempIV.PadRight(IVLength,&nbsp;'&nbsp;');<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ASCIIEncoding.ASCII.GetBytes(_TempIV);<br /><span style="color: #008080; ">35</span>&nbsp;}<br /><span style="color: #008080; ">36</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">GetLegalIV方法每次都会返回一个长度为16的byte数组<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">mobjCryptoService.IV&nbsp;=&nbsp;GetLegalIV();</span></div><br /><div>虽然是通过两个方法来取得的KEY和IV（二者都是byte数组），但是KEY和IV都是预先写死在代码里的，只不过是返回了特定长度的byte数组。</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">RijndaelManaged，这是对称算法合法的key和IV的长度（分别以位来计算）<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;min&nbsp;key&nbsp;size&nbsp;=&nbsp;128<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;max&nbsp;key&nbsp;size&nbsp;=&nbsp;256<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;min&nbsp;block&nbsp;size&nbsp;=&nbsp;128<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;max&nbsp;block&nbsp;size&nbsp;=&nbsp;256</span></div><br /><div>经过调查，还需要配置算法的mode和padding，此处并没有进行设置，所以默认分别为CipherMode.CBC和PaddingMode.PKCS7。详见<a href="https://msdn.microsoft.com/zh-cn/library/system.security.cryptography.symmetricalgorithm.mode(v=vs.110).aspx" title="mode">mode</a>和<a href="https://msdn.microsoft.com/zh-cn/library/system.security.cryptography.symmetricalgorithm.padding(v=vs.110).aspx" title="padding">padding</a></div><div><br />目前来看，需要调查的可以告一段落了，那么接下来，就需要调查如何Java实现了。在Java中，实现加密需要用到JCE提供的Cipher对象，类比C#的实现，借鉴广大程序员的智慧，我首先尝试写了一下（只贴出关键部分）</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init(<span style="color: #0000FF; ">byte</span>[]&nbsp;keyBytes)&nbsp;{<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果密钥不足16位，那么就补足.&nbsp;这个if&nbsp;中的内容很重要</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;base&nbsp;=&nbsp;16;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(keyBytes.length&nbsp;%&nbsp;base&nbsp;!=&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;groups&nbsp;=&nbsp;keyBytes.length&nbsp;/&nbsp;base<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;(keyBytes.length&nbsp;%&nbsp;base&nbsp;!=&nbsp;0&nbsp;?&nbsp;1&nbsp;:&nbsp;0);<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;temp&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">byte</span>[groups&nbsp;*&nbsp;base];<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.fill(temp,&nbsp;(<span style="color: #0000FF; ">byte</span>)&nbsp;0);<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(keyBytes,&nbsp;0,&nbsp;temp,&nbsp;0,&nbsp;keyBytes.length);<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyBytes&nbsp;=&nbsp;temp;<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;转化成JAVA的密钥格式</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SecretKeySpec(keyBytes,&nbsp;"AES");<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化cipher</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance("AES/CBC/PKCS5Padding");<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(NoSuchAlgorithmException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(NoSuchPaddingException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;}<br /><span style="color: #008080; ">24</span>&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;加密方法<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;content&nbsp;待加密內容字符串<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;keySrc&nbsp;加解密密秘钥字符串<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;iv&nbsp;算法所需向量<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;UnsupportedEncodingException<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; ">&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">33</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;encrypt(String&nbsp;content,&nbsp;String&nbsp;keySrc,String&nbsp;iv)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;UnsupportedEncodingException&nbsp;{<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;encryptedText&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init(keySrc.getBytes("utf-8"));<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.ENCRYPT_MODE,&nbsp;key,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IvParameterSpec(iv.getBytes()));<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encryptedText&nbsp;=&nbsp;cipher.doFinal(content.getBytes("utf-8"));<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Base64.encodeBase64String(encryptedText);<br /><span style="color: #008080; ">43</span>&nbsp;}<br /><span style="color: #008080; ">44</span>&nbsp;<br /><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;解密方法<br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;encryptedData&nbsp;待解密数据<br /></span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;keySrc&nbsp;加解密密秘钥字符串<br /></span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;iv&nbsp;算法所需向量<br /></span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;UnsupportedEncodingException&nbsp;<br /></span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #008000; ">&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">53</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;decrypt(String&nbsp;encryptedData,&nbsp;String&nbsp;keySrc,String&nbsp;iv)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;UnsupportedEncodingException&nbsp;{<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;decryptedText&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init(keySrc.getBytes("utf-8"));<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.DECRYPT_MODE,&nbsp;key,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IvParameterSpec(iv.getBytes()));<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decryptedText&nbsp;=&nbsp;cipher.doFinal(Base64.decodeBase64(encryptedData));<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String(decryptedText);<br /><span style="color: #008080; ">63</span>&nbsp;}<br /><span style="color: #008080; ">64</span>&nbsp;<br /><span style="color: #008080; ">65</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;UnsupportedEncodingException&nbsp;{<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EncryptingUtil&nbsp;eu&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;EncryptingUtil();<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;content&nbsp;=&nbsp;"abc";<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;加密字符串</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">70</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("加密前的："&nbsp;+&nbsp;content);<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;加密方法</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">72</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;enc&nbsp;=&nbsp;eu.encrypt(content,"秘钥值","向量值");<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(enc);<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;解密方法</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">75</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dec&nbsp;=&nbsp;eu.decrypt(enc,"秘钥值",&nbsp;"向量值");<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("解密后的内容："&nbsp;+&nbsp;dec);<br /><span style="color: #008080; ">77</span>&nbsp;}</div><br /><div>Java版本的实现，目前有几个问题，一个就是补齐方式的问题，在C#中默认的补齐方式PKCS7，但是Java默认并不支持该补齐方式，只有PKCS5；其次就是秘钥的长度问题，C#代码中的秘钥长度是256位的，但是Java默认最大支持128位的，执行时会报出&#8221;Illegal key size&#8221;的问题。这位大牛的东东帮到我了，感谢。<a href="http://www.cnblogs.com/haogj/p/4226178.html" title="查看">查看</a></div><img src="http://www.blogjava.net/images/blogjava_net/produ/YC92LJLOHFY56CNX2954Q0.png" border="0" alt="" width="640" height="227" /><br /><div>当需要使用256位长度的秘钥时，需要下载对应Java版本的JCE拓展包，图中的问题就是因为JCE拓展包和Java版本不匹配引起的</div></div><img src ="http://www.blogjava.net/produ/aggbug/430629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2016-03-28 22:12 <a href="http://www.blogjava.net/produ/archive/2016/03/28/430629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转--Eclipse安装SVN插件</title><link>http://www.blogjava.net/produ/archive/2015/04/24/424633.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Fri, 24 Apr 2015 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/04/24/424633.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/424633.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/04/24/424633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/424633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/424633.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body" style="margin: 0px 0px 20px; word-break: break-word; color: #393939; font-family: verdana, 'ms song', Arial, Helvetica, sans-serif; background-color: #faf7ef;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><span style="margin: 0px; padding: 0px; background-color: #ffffff;"></span></p></div><div id="cnblogs_post_body"><p>原文链接:<a href="http://www.cnblogs.com/ruiati/p/3584120.html">http://www.cnblogs.com/ruiati/p/3584120.html</a><br /><br />1、下载最新的Eclipse，我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版&nbsp;<br />&nbsp;&nbsp; 如果没有安装的请到这里下载安装：http://eclipse.org/downloads/&nbsp;<br /><br />2、下载SVN插件subclipse，安装方法有两种.那种绿色的以link方式安装的方式我在indogo上试了多次就是没成功。&nbsp;<br /><br />3、SVN插件下载地址及更新地址，你根据需要选择你需要的版本。现在最新是1.8.x&nbsp;<br />Links for 1.8.x Release:&nbsp;<br />Eclipse update site URL: http://subclipse.tigris.org/update_1.8.x&nbsp;<br />svn插件包下载: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240&nbsp;<br /><br />Links for 1.6.x Release:&nbsp;<br />Eclipse update site URL: http://subclipse.tigris.org/update_1.6.x&nbsp;<br />svn插件包下载: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240&nbsp;<br /><br />Links for 1.4.x Release:&nbsp;<br />Eclipse update site URL: http://subclipse.tigris.org/update_1.4.x&nbsp;<br />svn插件包下载: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240&nbsp;<br /><br />4、下载插件包，将插件包复制到Eclipse安装目录。见图&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp; 下载后的插件包目录结构：&nbsp;<br /><br /><img src="http://dl.iteye.com/upload/attachment/0066/8129/779a9f64-de4c-3a8c-9d58-f6ed03477e66.png" alt="" />&nbsp;<br /><br />将插件包features和plugins目录中的文件分别复制到Eclipse安装目录的features和plugins中。然后重启Eclipse 就好了&nbsp;<br /><br /><img title="点击查看原始大小图片" src="http://dl.iteye.com/upload/attachment/0066/8132/645af6fd-1b1c-3d02-b448-0a3560be8bd9.png" alt="" height="298" width="700" /><br /><br />5、通过Eclipse安装，看图&nbsp;<br /><br /><br /><img src="http://dl.iteye.com/upload/attachment/0066/8134/0c820d76-52da-32ec-9589-369a588ba1cc.png" alt="" />&nbsp;<br /><br /><img title="点击查看原始大小图片" src="http://dl.iteye.com/upload/attachment/0066/8140/64131ee5-85b2-3847-a829-7977d3f22878.png" alt="" height="433" width="700" /><br /><br /><img title="点击查看原始大小图片" src="http://dl.iteye.com/upload/attachment/0066/8142/c1aca096-713e-3288-9c6f-789af98c25db.png" alt="" height="549" width="700" /><br /><br />然后一路点Next，就OK了！！&nbsp;</p> <p>&nbsp;</p> <p><a rel="nofollow">将项目添加到存储库</a></p> <p>要将新的项目添加到 Subversion 存储库，请右击该项目（可以在任何 Eclipse 的项目视图或 Navigator  视图），并且从菜单中选择 Team &gt; Share Project。Eclipse 会显示 Share Project 对话框。</p> <p><br /><br /><img src="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/fig11.jpg" alt="Share Project 对话框" height="415" width="461" />&nbsp;</p> <p>从 Eclipse 当前支持的存储库列表中选择 SVN，然后单击 Next。接下来的对话框（参见图 13）让您选择现有存储库位置，或者创建一个新位置。</p> <p><br /><br /><img src="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/fig12.jpg" alt="选择存储库位置" height="415" width="461" />&nbsp;</p> <p>如果您的存储库已列出（如您所见，我已经添加了自已的库），选中它，并单击 Finish。如果您的存储库未列出，请添加它（有关说明，请参阅&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/#quicktest" rel="nofollow">快速测试</a>），并继续。Eclipse 将在存储库中创建新目录，其名称与项目相同，并显示项目中的所有文件和文件夹的列表。</p> <p>&nbsp;</p> <p><img src="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/fig13.jpg" alt="如何结合使用 Svn 和 Eclipse - .w.elLs black humor - .w.elLs black humor" border="0" /></p> <p>在顶部的字段中输入适当的内容来描述此项目，然后单击 Select All 选中该项目的所有文件。单击 OK 以检入项目，并将其当前状态传递给 Subversion 存储库。</p> <p>Subversion 的命令和输出结果显示在 Console 视图中，通常位于 Eclipse 窗口的底部（如果您查看 Subclipse 究竟对项目执行了什么操作）。</p> <p>&nbsp;</p> <p>版本控制系统的重要特性之一是其他开发人员能够随时继续开发，并在准备好时提交其变更。要下载这些变更，并将其与本地副本集成，您需要更新项目。</p> <p>右击您要更新的项目，然后从菜单中选择 Team &gt; Update。Eclipse 将从存储库中检索任何变更，并尝试将它们与本地副本合并。</p> <p>&nbsp;</p> <p>如果将文件添加到项目中（参见图 15），它不会自动成为版本控制的一部分 &#8212;&#8212; 您需要明确将其添加到特定的存储库中。在下面的屏幕快照中，您可以看到，我已经将 ReadMe.txt 文件添加到了 threadWork 项目中。</p> <p>&nbsp;</p> <p><img src="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/fig14.jpg" alt="如何结合使用 Svn 和 Eclipse - .w.elLs black humor - .w.elLs black humor" border="0" /></p> <p>右击新文件，然后选择 Team &gt; Add to Version Control。就是这样！下一次将此项目中的变更提交给存储库时，新文件也会检入。</p> <p>&nbsp;</p> <p>如果将文件添加到了与项目不在相关的存储库中，您可以轻松地删除它。右击文件，然后选择 Delete。不需要使用 Team 菜单，Subclipse 自动将标记要删除的文件，并将它从项目中移除。下一次将变更提交给存储库时，该文件被删除了。</p> <p>&nbsp;</p> <p>要重命名 Subclipse 控制的文件或目录，请右击它，然后选择 Rename。在输入字段中键入项的新名称，按 Enter  键。文件是在项目中重命名的，重命名操作（通过 Add 操作添加新名称、通过 Delete 操作删除旧名称）排队等待您下一次提交。在图 16  中，您可以看到将 main.c 重命名为 threadWork.c 之后、提交更改之前的 threadWork 项目。注意，Subclipse 为  &#8220;新&#8221; 文件添加的蓝色小加号表示该文件被安排在下一次提交时添加。</p> <p>&nbsp;</p> <p><img src="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/fig15.jpg" alt="如何结合使用 Svn 和 Eclipse - .w.elLs black humor - .w.elLs black humor" border="0" /></p> <p>&nbsp;</p> <p>如果项目生成文件，或者包括您不想检入的 Subversion 存储库文件，则可以通知 Subclipse  忽略它们。右击您要在版本控制中排除的文件或目录，然后选择 Team &gt; Add to svn:ignore 即可显示Add to  svn:ignore 对话框。</p> <p>&nbsp;</p> <p><img src="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/fig16.jpg" alt="如何结合使用 Svn 和 Eclipse - .w.elLs black humor - .w.elLs black humor" border="0" /></p> <p>单击 OK 将这个特定的文件添加到项目目录的 svn:ignore 属性中。选择 Wildcard extension  忽略具有当前文件扩展名的所有文件，或选择 Custom pattern  在忽略列表中添加您自己的通配符。下一次提交变更时，对忽略列表的这些更改将添加到存储库中。</p> <p>&nbsp;</p> <p>如果您对项目的变更感到满意，确定了您的代码可以编译，并且已经对变更进行测试，则应将它们提交给 Subversion 存储库。在您的工作站崩溃时，它可以作为一个备份，并允许其他开发人员更新其本地副本以包含您的变更。</p> <p>在尝试提交变更之前，请确保更新您的项目（参阅 &#8220;更新项目&#8221;）。右击项目，并从菜单中选择 Team &gt; Commit。Eclipse 会显示一个 Commit 对话框（参见图 18），其中汇总了您作出的变更。</p> <p>&nbsp;</p> <p><img src="http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/fig17.jpg" alt="如何结合使用 Svn 和 Eclipse - .w.elLs black humor - .w.elLs black humor" border="0" /></p> <p>如果仔细观察，您会看到一个属性更改为项目目录（我已经添加了</p> <p>svn:ignore</p> <p>属性，以使某些文件保留在存储库外），并且在添加 threadWork.c 时，删除了 main.c。这一变更对实际上表示的是一个操作（文件重命名）。</p> <p>此时，如果您要使某些资源保留在存储库外，则可以取消对这些资源选择。如果您在一个文件中完成了部分工作，并且不希望检入未完成的变更，则这种方法非常有用。在顶部的文本字段中输入适当的注释，然后单击 OK 将变更检入存储库。</p></div> <div></div> <div id="blog_post_info_block"> <div id="BlogPostCategory"></div></div><div id="blog_post_info_block" style="margin: 20px 0px 0px; color: #393939; font-family: verdana, 'ms song', Arial, Helvetica, sans-serif; background-color: #faf7ef;"><div id="BlogPostCategory" style="margin: 0px 0px 10px;"><a href="http://www.cnblogs.com/ruiati/category/475556.html" style="margin: 0px; padding: 0px; color: #6466b3;"><span style="background-color: #ffffff;"></span></a></div></div><img src ="http://www.blogjava.net/produ/aggbug/424633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-04-24 10:31 <a href="http://www.blogjava.net/produ/archive/2015/04/24/424633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>