??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久一区二区三区,日韩在线国产精品,久久精品三级http://www.aygfsteel.com/bitmap/bitmapzh-cnThu, 19 Jun 2025 14:02:23 GMTThu, 19 Jun 2025 14:02:23 GMT60用java多线E断点箋传实?/title><link>http://www.aygfsteel.com/bitmap/archive/2009/07/20/287300.html</link><dc:creator>bitmap</dc:creator><author>bitmap</author><pubDate>Mon, 20 Jul 2009 12:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/bitmap/archive/2009/07/20/287300.html</guid><description><![CDATA[     摘要: /**   * authorQannegu  * date:2009-07-16   */ annegu做了一个简单的Http多线E的下蝲E序Q来讨论一下多U程q发下蝲以及断点l传的问题? q个E序的功能,是可以分多个线E从目标地址上下载数据,每个U程负责下蝲一部分Qƈ可以支持断点l传和超旉q? 下蝲的方法是do...  <a href='http://www.aygfsteel.com/bitmap/archive/2009/07/20/287300.html'>阅读全文</a><img src ="http://www.aygfsteel.com/bitmap/aggbug/287300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bitmap/" target="_blank">bitmap</a> 2009-07-20 20:27 <a href="http://www.aygfsteel.com/bitmap/archive/2009/07/20/287300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈Java加密技术(七)http://www.aygfsteel.com/bitmap/archive/2009/07/19/287299.htmlbitmapbitmapSun, 19 Jul 2009 01:08:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/19/287299.html阅读全文

bitmap 2009-07-19 09:08 发表评论
]]>
谈谈Java加密技术(六)http://www.aygfsteel.com/bitmap/archive/2009/07/17/287204.htmlbitmapbitmapFri, 17 Jul 2009 13:27:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/17/287204.html阅读全文

bitmap 2009-07-17 21:27 发表评论
]]>
互联|创业与软g开发一些问?/title><link>http://www.aygfsteel.com/bitmap/archive/2009/07/14/286468.html</link><dc:creator>bitmap</dc:creator><author>bitmap</author><pubDate>Tue, 14 Jul 2009 05:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/bitmap/archive/2009/07/14/286468.html</guid><description><![CDATA[最q与一位创业公司的朋友U下交流了一些项目管理和软g开发的心得Q是互联|创业型公司Q通过几次的交,加深了我对互联网创业的一些感悟,本来不太x到桌面上_但实在忍不住Q还是想拿出来和希望创业的朋友讨Z? <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">那么我对互联|公司的比较感兴的地方主要体现在Y件质量和技术管理方面,以下2点可以作论的提纲Q?/span></p> <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">     1 软g质量Q尽质量是我们嘴边l常挂念的一个词Q但不少创业型公司的投机心理太重Q在与这些负责h的交中发现Q谈论的更多的是新想法、新概念Q有非常重的商业气息Q当然这没什么不好,但我看了他们的一些品后发现Q他们所做的产品用户体验非常p糕Q就拿界面来_非常的粗p,׃有家公司做的产品和易类|我特意打开2个窗口对比一下,总觉得易的看v来比较舒服,他们整体布局倒模仿易倒挺像,但问题就体现在细节上Q图片失真严重、字体风g一致、细节处理的不到位。好了,那就凑合着看吧Q发现该产品的功能非常的多,但让人郁L是,很多功能是有问题的,比如明明提示我系l给偶发了个邮gQ但是找不刎ͼ有时候提交表单是可以的,有时候见C堆java异常错误。所以我觉得q就是典型的q求功能的庞大而导致质量的~水?/span></p> <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">    其实自从豆瓣开始流行后Q大安意识到功能做的简z原来是有好处的Q有不少创业者声U自p向豆瓣看齐,鄙视csdnQ坚册z之路,但让我纳L是,很少有h真正的坚持下去,我有个同?6q底曑֜一家创业公司玩qpythonQ准备做一个很有趣的网站,叫做抱怨网Q其实是蛮有创意的,不久前JE不是有个哥们在四处发帖说我爱我家黑中介的事,其实本来q个|站是q这个事的,专门揭不良企业底的,但做着做着Q成了巨无霸Q开始是把大众点评网的功能加q去Q接着又开始融q赶集网的分cM息功能,最后有把智联招聘的招聘功能加上了,l局是1q不刎ͼ|站不出意料的死掉了Q原因就是用户体验差Q根本不感兴!最后我替他们老板做了下反思,其实说实话,我还是很理解创业人的心,看到好东襉K惌Q而且之前几年在互联网圈钱谁都眼红。另外,他们的功能尽是抄袭别h的,但还是有一定的特色与盈利模式,q且各个功能分的也蛮清的?nbsp;所以我觉得p|的原因不能简单的归结为功能太多,而是质量Q小公司也就那几号hQ作为开发h员,面对q么多的需求,只有拼命的赶q度Q丫q有旉考虑质量或者用户体验吗Q所以没有一定的资本与一批强有力的管理和开发h员,切勿贪大求全Q否则很可能是在生产垃圾。其实质量这个东西从高的层面上说是用户体验的好坏,bug不见得质量高,但用户体验差的东西绝对就是垃圾?/span></p> <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">    最q市面上有个说法有个说法?0w以模仿个淘宝,我认为就是扯淡,误导了很多创业者,认ؓq银子Q雇几个人,可以轻松抄袭淘宝了Q咱先不说市场投资,只谈技术,表面上看淘宝Q丫是一个破|站Q但背后的技术你看的见吗Q稳定性、性能、维护、可扩展性,q些都和软g质量息息相关Q直接媄响着用户的满意度Q你定真的做到了吗Q淘宝的架构师一q的薪水?0w了。所以我觉得创业者要领悟毛泽东思想Q采用各个击破的战术Q在有限的资源下U束的自׃品的功能Q做到小而美?/span></p> <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">     q里举个正面的例子,有家位于芝加哥、名?7 Signals的小公司Q正是这U拥抱限制的方式之代表者?7 Signals最初是一家网设计资讯公司,后来Z满自n需求而将业务扩展到Y件开发领域。他们编写了一些用于项目管理的内部工具。ؓ了和客户沟通, 向客户开放了部分pȝ。公司创始h和总裁杰森•弗瑞PJason FriedQ解释说Q在他们自己意识C前,已经做出了一套基于网늚应用。又做了4个月Q他们把软g转换为称作Basecamp的服务?nbsp;Basecamp发布?004q?月,很快在类似Flickr和Google的Gmail{新Web富应用天堂中名列前茅?/span></p> <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">     Basecamp只是q家公司׃q多旉投入量E序员做出来的一pd值得注意的小而精的品之一。Basecamp之后是Ta-da ListQ用于保存和׃n待办事项Q及cM事项Q列表。几个月后推ZBackpackQ它允许用户保存和共享便{֏文g。每U品都可靠q易于用,?nbsp;且都是精心设计的。每U品通常也都只包括少量新Ҏ。例如,Basecamp有一些精巧的电子邮g功能Q和其他服务和程序一P也可以设|邮件到达提醒——还可以从另外的计算机或手机{移动设备向Backpack|页发送邮Ӟ邮g文本׃在页面上昄出来?/span></p> <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">     2 技术管理,你会发现很多公司的负责h不是很懂技术,但却是负责技术的Q丫今天听到SOA是个好东西,号oULSOAQ反正大安不理解这个含p不清的东西Q做呗,看谁能忽悠的q谁Q一般来Ԍ创业型公ؓ了节U成本,不会预留专门的QAQ有专门的测试h员就不错了,所以缺乏一个质量保证的环节Q遇到问题怎么办?谁做的谁改,Ҏ什么样没h兛_Q只要负责h看到问题解决了就可以了,但,我想问的是,不良代码背后的隐患你知道吗?l果是你咬牙给开发h员开工资Q开发h员假装帮你实现梦惻I或者说造就一批划水的人。其实很多东西不是钱的问题,也不要以为多开点薪水就可以留住人心。另外我觉得很多技术负责h喜欢把东西模p化Q比如把软gx务的理念挂在嘴边Q但做v来是另一码子事,我觉得作Z个技术负责h自己pw先士卒Q至在创业公司是这Pq样才更有说服力Q遇到问题自己应当第一个冲上去Q拿出具体的解决ҎQ对代码应当做到_理Q做到心中有数。说到底Q创业公司得有一个技术核心,一个真正能实现你的x的hQ一个可以让大家凝聚h的hQ不至于让大家划水的人?/span></p> <p class="0" style="margin-top: 5pt; margin-bottom: 5pt"><span style="font-size: 12pt; color: #000000; font-family: &apos">好了Q先说那么多Q希望各位准备创业的同仁能真正的树立_֓意识Q打造精品,实现梦想</span></p> <img src ="http://www.aygfsteel.com/bitmap/aggbug/286468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bitmap/" target="_blank">bitmap</a> 2009-07-14 13:14 <a href="http://www.aygfsteel.com/bitmap/archive/2009/07/14/286468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts 重复提交问题的解x?/title><link>http://www.aygfsteel.com/bitmap/archive/2009/07/12/286448.html</link><dc:creator>bitmap</dc:creator><author>bitmap</author><pubDate>Sun, 12 Jul 2009 04:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/bitmap/archive/2009/07/12/286448.html</guid><description><![CDATA[<p><strong>问题的生原?br /> </strong>       面提交lAction去进行业务处理,Action再蟩转回前台面Q但q时URL依然?#8220;面提交lAction的链?#8221;Q这时前台刷C下页面,变成再ơ执行了一ơ提交操作?/p> <p> </p> <p><strong>解决思\<br /> </strong>     1Q在Action面中蟩转的时候用重定向,可以在struts-config.xml中配|?lt;forward ... redirect=“true”><br /> 不过q种Ҏ会得request中放|数据丢失;<br />      2Q用Token令牌环来实现<br />           提交到Action的时候,q行一pd操作Q然后保存一个标志,q时再蟩转到前台面。如果前台页面刷新的话,Action通过查看是否有标志,p判断用户是刷新还是提交?/p> <p> </p> <p><strong></strong></p> <p><strong>Action中操作o牌的Ҏ</strong><br />       一Q?saveToken(HttpServletRequest request)<br />             创徏一个新令牌Qƈ其保存在当前用L会话中,如果用户的会话不存在Q将首先创徏C话对?br />       二: isTokenValid(HttpServletRequest request)<br />             判断存储在当前会话中的o牌值和h参数中的令牌值是否匹配,如果匚wQ返回true,否则q回false ?br />             以下情况q回falseQ?br />                   1Q用LHttpSession不存?br />                   2Q用户Session中没有保存o牌?br />                   3Q在用户h参数中没有o牌?br />                   4Q存储在用户Session范围内的令牌值和h参数?的o牌g匚w<br />        三:resetToken()<br />              删除保存在Session范围内的令牌?/p> <p> </p> <p><strong></strong></p> <p><strong>CZ代码</strong></p> <p>1Q进入目标页Q如 <a >http://www.bt285.cn</a> Q通过IndexAction转发Q其中需要保存o?</p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000"> ActionForward execute(ActionMapping mapping, ActionForm form,   <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        HttpServletRequest request, HttpServletResponse response)   <br /> <img id="Codehighlighter1_166_264_Open_Image" onclick="this.style.display='none'; Codehighlighter1_166_264_Open_Text.style.display='none'; Codehighlighter1_166_264_Closed_Image.style.display='inline'; Codehighlighter1_166_264_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_166_264_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_166_264_Closed_Text.style.display='none'; Codehighlighter1_166_264_Open_Image.style.display='inline'; Codehighlighter1_166_264_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_166_264_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_166_264_Open_Text"><span style="color: #000000">{   <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    saveToken(request);   <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">index</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000"> </span><span style="color: #008000; text-decoration: underline">http://www.5a520.cn</span><span style="color: #008000">   </span><span style="color: #008000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div>  2Q目标页?test.jsp)需要用Struts标签库: <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff"><</span><span style="color: #800000">body</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">html:form </span><span style="color: #ff0000">action</span><span style="color: #0000ff">=" http://www.5a520.cn test.do"</span><span style="color: #ff0000"> method</span><span style="color: #0000ff">="post"</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">="提交"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">html:form</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">body</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> 当提交test.jsp时提交到TestAction处理Q? <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff"><</span><span style="color: #800000">struts-config</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">form-beans</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">form-bean </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="testForm"</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">="com.tanlan.struts.form.TestForm"</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">form-bean</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">form-beans</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">action-mappings</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">action </span><span style="color: #ff0000">path</span><span style="color: #0000ff">="/index"</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">="com.tanlan.struts.action.IndexAction"</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">forward </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="index"</span><span style="color: #ff0000"> path</span><span style="color: #0000ff">="/index.jsp"</span><span style="color: #0000ff">></</span><span style="color: #800000">forward</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">action</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">action </span><span style="color: #ff0000">path</span><span style="color: #0000ff">="/test"</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">="com.tanlan.struts.action.TestAction"</span><span style="color: #ff0000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />            name</span><span style="color: #0000ff">="testForm"</span><span style="color: #ff0000"> input</span><span style="color: #0000ff">="/index.jsp"</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">forward </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="test"</span><span style="color: #ff0000"> path</span><span style="color: #0000ff">="/test.jsp"</span><span style="color: #0000ff">></</span><span style="color: #800000">forward</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">forward </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="error"</span><span style="color: #ff0000"> path</span><span style="color: #0000ff">="/error.jsp"</span><span style="color: #0000ff">></</span><span style="color: #800000">forward</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">action</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">action-mappings</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">struts-config</span><span style="color: #0000ff">></span><span style="color: #000000">  <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <p>xQ大功告成!</p> <p>完整CZ请参考附件?/p> <p> </p> <img src ="http://www.aygfsteel.com/bitmap/aggbug/286448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bitmap/" target="_blank">bitmap</a> 2009-07-12 12:55 <a href="http://www.aygfsteel.com/bitmap/archive/2009/07/12/286448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈Java加密技术(五)http://www.aygfsteel.com/bitmap/archive/2009/07/11/286390.htmlbitmapbitmapSat, 11 Jul 2009 12:01:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/11/286390.html阅读全文

bitmap 2009-07-11 20:01 发表评论
]]>
漫谈Java加密技术(四)http://www.aygfsteel.com/bitmap/archive/2009/07/09/286150.htmlbitmapbitmapThu, 09 Jul 2009 13:08:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/09/286150.html阅读全文

bitmap 2009-07-09 21:08 发表评论
]]>
再谈谈Java加密技术(三)http://www.aygfsteel.com/bitmap/archive/2009/07/08/285977.htmlbitmapbitmapWed, 08 Jul 2009 14:22:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/08/285977.html除了DESQ我们还知道有DESede(TripleDES,是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR){多U对U加密方式,其实现方式大同小异,q里介绍对称加密的另一个算法——PBE

PBE
    PBE——Password-based encryptionQ基于密码加密)。其特点在于口oq戯己掌,不借助M物理媒体Q采用随机数Q这里我们叫做盐Q杂凑多重加密等Ҏ保证数据的安全性。是一U简便的加密方式?



通过java代码实现如下Q?br />

 

import java.security.Key;   
import java.util.Random;   
  
import javax.crypto.Cipher;   
import javax.crypto.SecretKey;   
import javax.crypto.SecretKeyFactory;   
import javax.crypto.spec.PBEKeySpec;   
import javax.crypto.spec.PBEParameterSpec;   
  
/**  
 * PBE安全~码lg 
http://www.bt285.cn   http://www.5a520.cn 
 *   
 * 
@author 梁栋  
 * 
@version 1.0  
 * 
@since 1.0  
 
*/
  
public abstract class PBECoder extends Coder {   
    
/**  
     * 支持以下L一U算?nbsp; 
     *   
     * <pre>  
     * PBEWithMD5AndDES   
     * PBEWithMD5AndTripleDES   
     * PBEWithSHA1AndDESede  
     * PBEWithSHA1AndRC2_40  
     * </pre>  
     
*/
  
    
public static final String ALGORITHM = "PBEWITHMD5andDES";   
  
    
/**  
     * 盐初始化  
     *   
     * 
@return  
     * 
@throws Exception  
     
*/
  
    
public static byte[] initSalt() throws Exception {   
        
byte[] salt = new byte[8];   
        Random random 
= new Random();   
        random.nextBytes(salt);   
        
return salt;   
    }
   
  
    
/**  
     * 转换密钥<br>  
     *   
     * 
@param password  
     * 
@return  
     * 
@throws Exception  
     
*/
  
    
private static Key toKey(String password) throws Exception {   
        PBEKeySpec keySpec 
= new PBEKeySpec(password.toCharArray());   
        SecretKeyFactory keyFactory 
= SecretKeyFactory.getInstance(ALGORITHM);   
        SecretKey secretKey 
= keyFactory.generateSecret(keySpec);   
  
        
return secretKey;   
    }
   
  
    
/**  
     * 加密  
     *   
     * 
@param data  
     *            数据  
     * 
@param password  
     *            密码  
     * 
@param salt  
     *            ?nbsp; 
     * 
@return  
     * 
@throws Exception  
     
*/
  
    
public static byte[] encrypt(byte[] data, String password, byte[] salt)   
            
throws Exception {   
  
        Key key 
= toKey(password);   
  
        PBEParameterSpec paramSpec 
= new PBEParameterSpec(salt, 100);   
        Cipher cipher 
= Cipher.getInstance(ALGORITHM);   
        cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);   
  
        
return cipher.doFinal(data);   
  
    }
   
  
    
/**  
     * 解密  
     *   
     * 
@param data  
     *            数据  
     * 
@param password  
     *            密码  
     * 
@param salt  
     *            ?nbsp; 
     * 
@return  
     * 
@throws Exception  
     
*/
  
    
public static byte[] decrypt(byte[] data, String password, byte[] salt)   
            
throws Exception {   
  
        Key key 
= toKey(password);   
  
        PBEParameterSpec paramSpec 
= new PBEParameterSpec(salt, 100);   
        Cipher cipher 
= Cipher.getInstance(ALGORITHM);   
        cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);   
  
        
return cipher.doFinal(data);   
  
    }
   
}
  

再给Z个测试类Q?
import static org.junit.Assert.*;   
  
import org.junit.Test;   
  
/**  
 *   
 * 
@author 梁栋  http://www.5a520.cn http://www.feng123.com
 * 
@version 1.0  
 * 
@since 1.0  
 
*/
  
public class PBECoderTest {   
  
    @Test  
    
public void test() throws Exception {   
        String inputStr 
= "abc";   
        System.err.println(
"原文: " + inputStr);   
        
byte[] input = inputStr.getBytes();   
  
        String pwd 
= "efg";   
        System.err.println(
"密码: " + pwd);   
  
        
byte[] salt = PBECoder.initSalt();   
  
        
byte[] data = PBECoder.encrypt(input, pwd, salt);   
  
        System.err.println(
"加密? " + PBECoder.encryptBASE64(data));   
  
        
byte[] output = PBECoder.decrypt(data, pwd, salt);   
        String outputStr 
= new String(output);   
  
        System.err.println(
"解密? " + outputStr);   
        assertEquals(inputStr, outputStr);   
    }
   
  
}
  

控制台输出:

  • 原文: abc   
  • 密码: efg   
  • 加密? iCZ0uRtaAhE=   
  •   
  • 解密? abc  

  •  

     



    bitmap 2009-07-08 22:22 发表评论
    ]]>
    用Java语言产生随机数的两个Ҏhttp://www.aygfsteel.com/bitmap/archive/2009/07/06/285724.htmlbitmapbitmapMon, 06 Jul 2009 14:22:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/06/285724.html
      在Java语言中生成随机数相对来说比较单,因ؓ有一个现成的Ҏ可以使用。在MathcMQJava语言提供了一个叫做random的方法。通过q个Ҏ可以让系l生随机数。不q默认情况下Q其产生的随机数范围比较,为大于等?到小?的double型随机数。虽然其随机C生的范围比较,不能够满x常的需求。如日常工作中可能需要生整数的随机数。其实,只要对这个方法进行一些灵zȝ处理Q就可以获取L范围的随机数?a >http://www.bt285.cn  http://www.5a520.cn  

      如我们可以先通过randomҎ生成一个随机数Q然后将l果乘以10。此时生的随机数字即ؓ大于{于0于10的数字。然后再利用IntҎq行转换(它会L数掉后面的数字Q即只获取整数部分,不是四舍五入)。最后即可获取一??的整数型随机数字。其实现Ҏ很简单,是对原有的randomҎ按照如下的格式进行变型:(int)(Math.Random()*10)卛_。其实我们还可以对这个方法进行扩展,让其产生L范围内的随机数。至需要将q个10换成n卛_Q如改ؓ(int)(Math.Random()*n)。此时应用程序就会生一个大于等?与n之间的随机数。如n讄?Q那么其׃产生一??之间的整数型的随机数。如果将q个写成一个带参数的方法,那么只要用户输入需要生成随机数的最大|可以让q个Ҏ来生成制定范围的随机数。在Java中定义自q工具?br />
      有时候程序员可能需要生成一个指定范围内的随机偶数或者奇数。此时是否可以通过q个Ҏ来实现呢?{案是肯定的。如现在E序要需要生成一?-100范围内的偶数。此时该如何实现?首先Q需要生成一??9之内的随机数(至于q里Z么是99Q大家耐心看下d知道原因?。要实现q个需求,很简单吧Q只要通过如下语句可以实玎ͼ i=1+(int)(Math.Random()*100)。其?int)(Math.Random()*99)产生0?9的整数型随机数。然后再加上1是产生1?00之间的随机整数。然后将产生的随机数赋值给变量i。但是此时其产生的随机数x偶数Q又有奇数。而现在程序员需要的是一个随机的偶数。那么我们可以在后面加上一个if判断语句。将q个随机数除?Q如果没有余数的?或者余Cؓ0)则表明这个随机数是偶敎ͼ直接q回卛_。如果其q回的余C为零Q那么就表明其是奇数Q我们只要加?变Z偶数Q返回即可。注意,在上面的随机数生成中Q笔者采用的范围??9Q然后再加上1让其变ؓ1?00的随机数。最后的l果是生成1?00之间的随机偶数。其实,如果要范围随机奇数的话,至需要对上面的语句进行稍微的修改卛_。Java:改变你我的世?br />
      假设现在用户想生成一个Q意范围内的奇数或者偶敎ͼ能够实现?假设现在用户惛_C个m到n之间的Q意偶?其中m

      可见虽然randomҎ其自w生的随机数有比较严格的范围限制。但是只要对其进行合理的转换Q程序员仍然可以采用q个Ҏ产生用户所需要的随机数据?br />
      二、通过RandomcL生成随机数?br />
      在Java语言中,除了可以通过random Ҏ来生随机数之外Q还可以通过一个randomcL产生随机数。程序开发h员可以通过实例化一个Random对象来创Z个随机数的生成器。如Random i=new Random()。通过q条语句利用了RandomcdZ一个随机数的生成器。不q以q种Ҏ创徏随机数时Q与采用RandomҎ产生随机数的机制不同。利用现在这U方式实例化对象ӞJava~译器会以系l当前的旉作ؓ随机数生成器的种子。由于时间时时刻d变化的。若以这个时间作为生成器的种子,可以保证生成的随机数真的是随机的,其生成的随机数重复率会大大的降低?br />
      利用q种Ҏ其比较方ѝ如可以利用提供的关键字Q让E序q回一个随机的整数(采用int nextInt(10)){等。不q其q回控制要比RandomҎ困难一炏V如现在需要系l提供一?0?0之间的随机奇敎ͼ 利用q个Randomcd无法完成。也是_利用q个RandomcL生成随机敎ͼ其只能够控制上限Q而不能够控制下限。换一句话_其可以指定最大的随机数范_而不能够指定最的随机数范围。所以,在灵zL上Q其比RandomҎ要稍微差一炏V?br />
      另外利用q个Ҏ来实现的话,必须先创Z个对象。也是说利用RandowcL创徏对象。这跟RandowҎ不同。像上面丄例子中,RandowҎ本n是一个mathcMҎQ可以直接调用,省去对象创徏的方法。ؓ此笔者徏议各位读者与E序开发h员,最好还是用RandomҎ来创建随机数。只有在生成一些比较特D的随机数时采用RandomcR如现在需要生成一个概率密度ؓ高斯分布的双_ֺ值随机数Ӟ则通过采用RandomcȝҎ来创建随机数相对来说比较单一炏V?br />
    三、生随机的字符?br />
      上面介绍的两U方法,产生的都是随机的数值型数据。但是有时候用户可能还需要生随机的字符。其实也可以利用randomҎ来生随机字W。如可以利用代码生成一个随机的写字符Q?char)(‘a’+Math.random()*(‘z’-‘a’+1))。其实这跟生成Q意两个数之间的随机数cM。通过以上的代码就可以生成一个范围之内的L随机字符。通过对这个代码进行适当的修_q可以生成Q意两个字W之间的随机字符与Q意大写字W的随机字符。其转换的方式跟上面提到的Q意范围之内的随机数类伹{各位读者若感兴的话,可以自己q行试一下。师傅领q门Q修行在自n。如果笔者在q里一股脑儿将所有的{案告诉大家Q大家的印象不会很深。大家若回去自己动手试试看,反而更ҎC?br />
      W者在q里l大家一个提C,只需要根据m+(int)(Math.Random()*(n-m))q条语句来调?char)(‘a’+Math.random()*(‘z’-‘a’+1))q个代码卛_?br />
      最后笔者需要强调的一点就是在用户传入参数的时候,最好要对用户传入的参数q行合法性检查。以免用户传入的参数不符合既定的要求Q如参数需要的是数值型的数据而传入的却是字符型的数据Q而导致程序运行出错?

    bitmap 2009-07-06 22:22 发表评论
    ]]>
    漫谈Java加密技术(二)http://www.aygfsteel.com/bitmap/archive/2009/07/05/285584.htmlbitmapbitmapSun, 05 Jul 2009 13:18:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/05/285584.html阅读全文

    bitmap 2009-07-05 21:18 发表评论
    ]]>
    վ֩ģ壺 | | ͩ| | | | | | | | | | ʡ| | Ͳ| Ԫ| | | | ij| | °Ͷ| ɽ| | | | | | | ʡ| Դ| | | | ˻| | | | | | ͩ®|