加密算法中BASE64、MD伍【电子商务】、SHA、HMAC等中间的分别

http://blog.csdn.net/lplj717/article/details/51828692

光棍节的狂欢

依照项目要求了然了一晃二种加密算法(参考其余博客),内容简短介绍BASE64、MD五、SHA、HMAC两种加密算法。BASE6四编码算法不算是真正的加密算法。

 

MD5、SHA、HMAC那两种加密算法,可谓是非可逆加密,就是不行解密的加密方法,大家称之为单向加密算法。大家普通只把她们作为加密的根基。单纯的如上两种的加密并不保障。 

“时间到,开抢!”坐在电脑前早已等候多时的小美一看时间已到201一年1十一月二21二十四日零时,便慌忙地投身于Taobao商城一年1度的巨型网购降价活动——“Taobao双1一购物狂欢节”。小美打开早已收藏好的瑰宝——某品牌的高筒靴,飞快的点击购买,付款,一改过自新发现三千双鞋子已被抢购1空。

 

 

BASE64 
根据EscortFC20四伍的定义,Base6四被定义为:Base6四内容传送编码被设计用来把自由连串的五位字节描述为壹种科学被人一向识其他款型。(The
Base6肆 Content-Transfer-Encoding is designed to represent arbitrary
sequences of octets in a form that need not be humanly readable.) 
广大于邮件、http加密,截取http音讯,你就会发觉登录操作的用户名、密码字段通过BASE6四加密的。 

小美跳起来,大叫一声“欧耶!”

通过Java代码完结如下:

 

[java] view
plain
 copy

小美不知道,就在二十日零点未来的那1分钟内,全国有34贰万人和他一起涌入天猫商城商城。当然,她更不清楚,此时此刻,在Taobao南京的壹间办公室里,灯火通明,那里是“战时指挥部”,天猫商城技术部的一批工程师,正在紧瞧着网址的流量和交易数据。白板上是他俩恰恰下的注,赌何人能最纯粹地猜中流量峰值和全天的交易总额。他们的光景放着富饶的食品和各项提神的饮品。

 

 

 电子商务 1电子商务 2

一阵匆忙的电话声音起来,是前线部门精通数据的,工程师大声报着:“第一分钟,进入Taobao商城的会员有3430000”。过1会工程师主动拿起电话:“交易额超过1亿了,未来是第柒分钟。”接下去,“第1壹分钟,刚突破2亿”。“第贰十多秒钟,三亿了”。“第二个钟头,四.3玖亿”。那么些多少随后出现在新浪上,引起一片惊呼。

  1. /**  
  2.  * BASE64解密  
  3.  *   
  4.  * @param key  
  5.  * @return  
  6.  * @throws Exception  
  7.  */    
  8. public static byte[] decryptBASE64(String key) throws Exception {    
  9.     return (new BASE64Decoder()).decodeBuffer(key);    
  10. }    
  11.     
  12. /**  
  13.  * BASE64加密  
  14.  *   
  15.  * @param key  
  16.  * @return  
  17.  * @throws Exception  
  18.  */    
  19. public static String encryptBASE64(byte[] key) throws Exception {    
  20.     return (new BASE64Encoder()).encodeBuffer(key);    
  21. }    

 

根本正是BASE6四Encoder、BASE64Decoder多个类,大家只须要领会使用相应的秘诀即可。另,BASE加密后发生的字节位数是八的倍数,若是不够位数以=符号填充。

“完蛋了!”突然有人民代表大会喝一声,全体的眸子都浮动的瞧着她,只见她挠挠头,嘿嘿的笑道“小编赌的少了,20亿无拘无束就能过了,小编再加伍亿”,他跑去白板边上把团结的赌注擦去,写上25,接下去有人写上2八,有人写上30,有人跑到博客园上开下盘口,同事们纷繁转发投注。接下来的那贰四个小时,战时指挥部的工程师们都无法休息,他们看着网址的种种监督指标,适时的调动机器和增减成效。顶住第二波高峰过后,这么些人早先忙里偷闲的给协调买东西,我们互相交换着哪家买的移动硬盘可靠,哪家衣裳适合本人的女对象,不时的有人哀嚎宝贝被人抢了、信用卡额度不够了。同时,旁边白板上的赌注越下越大。

MD5
MD5 — message-digest algorithm 5(音讯-摘要算法)缩写,广泛用于加密和平消除密技术,常用于文书校验。校验?不管文件多大,经过MD五后都能生成唯1的MD5值。好比以往的ISO校验,都以MD伍校验。怎么用?当然是把ISO经过MD伍后发生MD伍的值。壹般下载linux-ISO的情人都见过下载链接旁边放着MD五的串。正是用来证实文件是或不是同样的。

电子商务 3

经过java代码贯彻如下:

三月23日,那一个棍子最多的生活被网络好友自小编嘲笑的变成了一个纪念日——“光棍节”。而Tmall网又用疯狂的折扣促销给它赋予了此外1个意义——“购物狂欢节”。201壹年三月十三日那1天,天猫商城与天猫网交易额之和突破5贰亿,这一个数字是“购物天堂”Hong Kong1天零售总额8.五亿的陆倍。

 

 

 

网络好友感受到的是疯抢的春风得意,而网址的技术人士感受到的却是“压力山大”。就就像你家办酒席,宴请左邻右舍,这几个办起来简单。假使宴请10里八乡全数的人,吃饭的人自然快意,但却不是形似人家可以办得兴起的。能办得兴起如此盛宴者,供给强大的财力物力、协会力量、技术实力(例如做这么多菜,你的炒锅一定倘若“分布式的”、“可复制的”、“可扩展的”,洗菜切菜要有“工作流引擎”,上菜的不贰法门要用图论来总计出来,甚至连厨房的下水道都要再一次规划)。

[java] view
plain
 copy

 

 

天猫能够设置那样盛宴,网址的技术实力可知一斑。天猫商城网拥有全国最大的hadoop分布式计算集群之一,日新增数据50TB,有40PB海量数据存款和储蓄。分布在举国上下内地80八个节点的CDN网络,扶助的流量超越800Gbps。天猫商城的探寻引擎能够对数10亿的商品数量进行实时搜索,其余还拥有独立研究开发的公文存款和储蓄系统和缓存系统,以及java中间件和音信中间件系统,那全体组成了3个特大的电子商务操作系统。其余从事商业业数据上来看,AMAZON的财报呈现201一年到位了大体上
480亿欧元的交易额,EBAY201壹年财报全年到位了大约600亿澳元的交易额(不蕴含其独自的汽车交易平台)。不管从交易额、商品数量、同期相比较加快等指标上看,天猫商城网均远超于此,是日前全世界最大的电子商务平台。(由于天猫商城非上市集团,未透露201一年业绩,以上内容出自Tmall网技术副首席营业官@_行癫 的微博)

 电子商务 4电子商务 5

 

  1. /**  
  2.  * MD5加密  
  3.  *   
  4.  * @param data  
  5.  * @return  
  6.  * @throws Exception  
  7.  */    
  8. public static byte[] encryptMD5(byte[] data) throws Exception {    
  9.     
  10.     MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);    
  11.     md5.update(data);    
  12.     
  13.     return md5.digest();    
  14.     
  15. }    

以上那几个技术数据只怕曾经让有个别同班发生不适的痛感,为了让更加多的人读懂这本书,大家从技术的角度来看,小美访问天猫商城网的时候,网址上发生了怎样事情。下参考资料:《你刚刚在天猫上买了1件事物【技术普及帖】》,来自哈利法克斯邮政和邮电通讯学院孙放同学

日常大家不直接选用上述MD5加密。平常将MD伍生出的字节数组交给BASE6四再加密1把,获得相应的字符串。

电子商务 6

SHA
SHA(Secure Hash
Algorithm,安全散列算法),数字签名等密码学应用中至关心爱抚要的工具,被大面积地接纳于电子商务等消息安全领域。就算,SHA与MD伍通过碰撞法都被破解了,
不过SHA如故是公认的平安加密算法,较之MD五更为安全。 

 

经过java代码落到实处如下:

 

 

为了有个更直观的对待,大家说2个同行,他在201一年光棍节此前做优惠,流量上去之后,达到1二Gbps(他们有如此大的流量,CEO很乐意,在博客园方面说了这么些数额),那时候流量达到了顶峰,网址大概挂掉,用户不能下订单。而天猫网光棍节当天网络的流量最高达到800多Gbps,带给各家银行和快递集团的流量也让她们压力山大,如临大敌(后来,他们以能够撑住天猫商城带来的流量为荣而随处宣扬)。此外假若你在网上买卖过高铁票以来,更能体味到网址能扶助多大的流量有多主要。但那不是一时半晌做出来的,也不是有钱就能源办公室成的。

 

 

[java] view
plain
 copy

如上比较的那些网址,只怕读者很简单就猜到是哪一家,那里拿出来作相比,相对未有嗤笑人家的情趣,采纳一般的网址技术方案,能不负众望那种程度早已正确了。任何网址的进步都不是一面依旧的,在怎么样的级差选拔什么的技艺。在迈入的经过中网址会遇见各个种种的题材和事务带来的下压力,正是这个原因才推向着技术的前进和发展,而技术的前进又会反过来促进业务的越来越大升级。贰者互为因果,相互促进。方今Taobao网的流量已经是满世界排行第22、国内排行第三(美利坚合众国的ebay全球排行二3,国内前两名是百度和腾讯)。Tmall网的系统也从使用一台服务器,到应用万台以上的服务器。本书就为大家讲述天猫商城网在漫天向上进度中,全体的积极性和消沉的技能革命的来踪去迹,那由许多妙趣横生的传说组成。

 

 

 电子商务 7电子商务 8

正就像是很几个人或组织成功了以往,就会为投机的门户编造2个华美的旧事。Taobao网的出身,网上也有丰硕多的轶事,上边我们就从它的诞生开始讲起。

  1.  /**  
  2.      * SHA加密  
  3.      *   
  4.      * @param data  
  5.      * @return  
  6.      * @throws Exception  
  7.      */    
  8.     public static byte[] encryptSHA(byte[] data) throws Exception {    
  9.     
  10.         MessageDigest sha = MessageDigest.getInstance(KEY_SHA);    
  11.         sha.update(data);    
  12.     
  13.         return sha.digest();    
  14.     
  15.     }    
  16. }    

 

HMAC
HMAC(Hash Message Authentication
Code,散列音信鉴定区别码,基于密钥的Hash算法的辨证协议。音信鉴定识别码完结鉴其他规律是,用公开函数和密钥发生二个定点长度的值作为验证标识,用这几个标识鉴定识别音信的完整性。使用一个密钥生成一个稳住大小的小数据块,即MAC,并将其参预到新闻中,然后传输。接收方利用与发送方共享的密钥实行辨认认证等。

 

 

 

 

村办网址

通过java代码贯彻如下:

 

 

200三年十二月一日,马云(英文名:杰克 Ma),在瓜亚基尔,成立了三个潜在的组织。他叫来12人职工,要她们签了一份协议,那份协议供给他俩立马离开阿里Baba(Alibaba),去做3个秘密的系列。那些体系供给相对保密,大将戏称“连说梦话被妻子听到都十二分,什么人假如透漏出去,笔者将追杀到遥远”。那份协议是英文版的,匆忙之间,大部分人历来比不上看懂,但鉴于对老将的深信,都卷起铺盖离开了阿里Baba(Alibaba)。

[java] view
plain
 copy

他们去了三个诡秘的据点——湖畔公园小区的1套未装修的屋宇里,房子的主人是杰克 Ma。那伙人刚进来的时候,中国首富马云给她们铺排了二个职分,便是在最短的岁月内做出叁个私有对个体(C2C)的商品交易的网址。今后出3个标题考考读者,看你适不合乎做Tmall的创业团队。亲,如若让您来做,你如何做?

 

在说出这些答案以前,容小编先卖个关子,介绍一下那些创业团队的分子:八个开发工程师(虚竹、叁丰、多隆)、一个UED(2统治)、八个营业(小宝、阿珂、破天)、一个老板(武财神)、还有正是杰克 Ma和她的书记。当时对整个项目组来说压力最大的正是岁月,怎么在最短的小运内把1个有史以来就一直不的网址从零开头建立起来?精通天猫商城历史的人驾驭天猫商城是在2003年6月17日上线的,那里面只有二个月。若是你在那一个集体里,你怎么办?我们的答案正是:买3个来。

 电子商务 9电子商务 10

买三个网址醒目比做1个网址要省心1些,可是他们的盼望可不是做多个小网址而已,要做大,就不是无论买个就行的,要有相比较低的有限扶助资金,要能够方便的扩展和一次开发。那接下去就是第二个问题:买一个哪些的网址?答案是:轻量一点的,不难一点的,于是买了这么一个架构的网址:LAMP(linux+apache+mySQL+PHP)。那几个直到今后照旧3个很常用的网站架构模型。那种架构的优点是:无需编写翻译,发表神速,PHP效用强大,能做从页面渲染到多少访问具有的事情,而且使用的技巧都以开源的,免费。

  1. /**  
  2.  * 初始化HMAC密钥  
  3.  *   
  4.  * @return  
  5.  * @throws Exception  
  6.  */    
  7. public static String initMacKey() throws Exception {    
  8.     KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);    
  9.     
  10.     SecretKey secretKey = keyGenerator.generateKey();    
  11.     return encryptBASE64(secretKey.getEncoded());    
  12. }    
  13.     
  14. /**  
  15.  * HMAC加密  
  16.  *   
  17.  * @param data  
  18.  * @param key  
  19.  * @return  
  20.  * @throws Exception  
  21.  */    
  22. public static byte[] encryptHMAC(byte[] data, String key) throws Exception {    
  23.     
  24.     SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);    
  25.     Mac mac = Mac.getInstance(secretKey.getAlgorithm());    
  26.     mac.init(secretKey);    
  27.     
  28.     return mac.doFinal(data);    
  29.     
  30. }    

当下大家是从八个奥地利人那里买来的贰个网站种类,这几个连串的名字叫做PHPAuction(他们的官方网址 
http://www.phpauction.net
 
 这么些名字很直接,一眼就看出来这么些种类是用什么语言做的、是干吗用的),PHPAuction有好多少个版本,大家买的是最高版的,功效比较多,而且最首要的是对方提供了源代码。最高版比较贵,花了我们三千法郎(貌似今后减价了,只要946澳元)。买来之后不是向来就能用的,必要多多当地化的修改,例如页面模板改的大好一点,页头页脚加上自个儿的站点简介等,其中最有技术含量的是对数据库进行了一个改动。原来是从3个数据库举办具有的读写操作,拿过来以往多隆把它给拆分成一个主库、三个从库,读写分离。这么做的好处有几点:存款和储蓄体量扩充了,有了备份,使得安全性扩充了,读写分离使得读写功用提高了。那样壹切类别的架构就像下图所示:
电子商务 11 

 

在那之中pear
DB是3个PHP模块,负责数据访问层。其它也用开源的论坛系统PHPBB( 
http://www.phpbbchina.com
 
)搭建了一个小的论坛社区,虚竹负责机器买卖、配置、架设等,三丰和多隆负主要编辑码,他们把交易系统和论坛系统的用户新闻挖掘,给运转职员付出出后台管理(admin系统)的机能,把交易类型从唯有拍卖那一种扩张为拍卖、一口价、求购商品、海报商品(意思是还没生产的货色,先挂个海报出来)那多种。(PHPAuction惟有拍卖的交易,Auction即拍卖的意趣。@_行癫在微博中提到:今日eBay全部贸易中拍卖交易还是占了十分之四,而在华夏,此种情势在天猫大致从一开端就得不到占据优势,近年来在主流的交易中大致能够忽略不计。背后的原由平素令人费解。作者大致能够提交在那之中一种解释,eBay基本在发达国家开始展览工作,创设业外包后,电子商务的中心群众体育大四只好表现为零星的私人住房间贸易。

 

在经历了其余一些好玩的政工之后(这个有意思的政工包括“Taobao”那一个名字的原委,职工花名的缘由等等,由于本书首要讲述技术方面包车型地铁传说,对那些有趣味的能够去网上找),网址开首上线运营了。
电子商务 12 

提交2个完好类,如下:

在接下去的大都年时间里,那几个网址快捷彰显出了它的生机。那里有必要提一下随即的商海条件,非典(SARS)的四虐使得大家都不敢出门,特别是去市场之类人多的地点。别的在神州大地上最早现身的C2C网址易趣也正忙的不亦今日头条,二零零三年1月,eBay以三千万日币收购了易趣集团3三%的股金,2003年十月以壹.伍亿欧元购回了易趣公司剩余陆柒%的股份。当时天猫商城网允许购销两方留下联系方式,允许同城交易,整个操作进度简单轻松。而eBay为了收取交易佣金,是禁止这么做的,这一定扩展了交易进程的难度。而且eBay为了全球统1,把易趣原来的系统替换到了美利哥eBay的种类,用户体验一下全变了,操作起来非凡麻烦,那相当于是把积攒的用户拱手送给了天猫。为了不引起eBay的注意,天猫网在200三年里直接宣称自个儿是3个“个人网站”。由于那么些创业团队强大的市集开发和平运动营能力,天猫网发展的格外便捷,200三年初就掀起了注册用户XXX,最高天天3一万PV,从2月到年根儿成交额5000万。那并未有引起eBay的注意,却引起了阿里巴巴(Alibaba)里面很多职员和工人的小心,他们以为那个网址之后会化为Alibaba强大的挑衅者。甚至有人在内网发帖,忠告管理层要当心这些刚刚运转的网址,但管理层就像马耳东风。(那个公司的保密工作做的真好)

 

在集镇和平运动营的后方,Taobao网的技巧团队也在急迅的做着系统的一字不苟和换代。那里还有个有趣的有趣的事,eBay和易趣早期都有职工在论坛上响应用户的须求,eBay的论坛用粉深黄背景来区分职员和工人的解说,易趣的职工在论坛上小名都选各样豆豆,例如黄豆豆、蚕豆豆等。天猫在议论运行策略的时候关系那个难题,须要全部的职员和工人都去论坛上回复用户的标题。最早回答难点的天职落在小宝头上,那大家用什么样名字可以吗?“淘淘”?“婴儿”?小宝都不惬意,太女性化了。研讨了很久现在,小宝灵光乍现,干脆取个名字叫“小宝”吧,小宝带多个老婆来开店,迎接各位观众,很有轶事性。于是广大武侠小说中的人物开首在论坛中央银行侠仗义,那么些别称上边标志着“Taobao店小贰”,他们答复着各个各类的题目,急忙响应着用户的各个供给。就算是技巧上能一举成功的,多少人钻探一下,立即就付出、测试、发表上线。反过来相比一下,易趣被eBay收购之后,系统转换到了全球通用的版本,响应用户的贰个供给要求层层审查批准,反应速度自然慢了下来。

[java] view
plain
 copy

登时Taobao第一个版本的系统里头已经包罗了商品宣布、管理、搜索、商品详情、出价购买、评价投诉、小编的Tmall这么些作用(未来主流程中也是这几个模块。在200三年10月增多了一个作用节点:“安全交易”,那个是支付宝的雏形)。随着用户须要和流量的持续拉长,系统方面做了广大的不乏先例革新,服务器由最初的1台变成了三台,1台负责发送email、一台负责运营数据库、1台负责运转webApp。过壹段时间之后,商品搜索的成效占用数据库财富太大了(用like搜索的,不快),又从阿里Baba(Alibaba)普通话站搬过来他们的追寻引擎iSearch,初叶iSearch索引的文书放在硬盘上,随着数据量的增进,又买入了NetApp服务器放置iSearch。

 

如此那般快节奏的劳作,其实大家都累得老大,有人就建议大家随时四处的锻练肉体,但是外面SA路虎极光S横行,在二个一百多边的屋宇里,怎么练习吧?高挑美丽的女人阿珂建议大家演练提臀操,这几个建议遭到男人的平等反对,后来虚竹就教大家演习倒立,这些我们都能承受。于是那些倒立的价值观一向持续现今,和花名文化、武侠文化一并继承了下去。

 电子商务 13电子商务 14

随着访问量和数据量的全速上升,难点不慢就出去了,第壹个难题出现在数据库上。mySQL当时是第伍版的,大家用的是默许的贮存引擎myisam,这体系型读数据的时候会把表锁住(我们精通Oracle在写多少的时候会有行锁,读数据的时候是未有的),越发是主库往从库上面写多少的时候,会对主库发生多量的读操作,使得主库品质小幅下跌。那样在高访问量的时候,数据库撑不住了。此外当年的mySQL不及方今的mySQL,在数据的体量和安全性方面也有诸多原始的不足(和Oracle相比较)。

  1. import java.security.MessageDigest;    
  2.     
  3. import javax.crypto.KeyGenerator;    
  4. import javax.crypto.Mac;    
  5. import javax.crypto.SecretKey;    
  6.     
  7. import sun.misc.BASE64Decoder;    
  8. import sun.misc.BASE64Encoder;    
  9.     
  10. /**  
  11.  * 基础加密组件  
  12.  *   
  13.  * @author 梁栋  
  14.  * @version 1.0  
  15.  * @since 1.0  
  16.  */    
  17. public abstract class Coder {    
  18.     public static final String KEY_SHA = “SHA”;    
  19.     public static final String KEY_MD5 = “MD5”;    
  20.     
  21.     /**  
  22.      * MAC算法可选以下二种算法  
  23.      *   
  24.      * <pre>  
  25.      * HmacMD5   
  26.      * HmacSHA1   
  27.      * HmacSHA256   
  28.      * HmacSHA384   
  29.      * HmacSHA512  
  30.      * </pre>  
  31.      */    
  32.     public static final String KEY_MAC = “HmacMD5”;    
  33.     
  34.     /**  
  35.      * BASE64解密  
  36.      *   
  37.      * @param key  
  38.      * @return  
  39.      * @throws Exception  
  40.      */    
  41.     public static byte[] decryptBASE64(String key) throws Exception {    
  42.         return (new BASE64Decoder()).decodeBuffer(key);    
  43.     }    
  44.     
  45.     /**  
  46.      * BASE64加密  
  47.      *   
  48.      * @param key  
  49.      * @return  
  50.      * @throws Exception  
  51.      */    
  52.     public static String encryptBASE64(byte[] key) throws Exception {    
  53.         return (new BASE64Encoder()).encodeBuffer(key);    
  54.     }    
  55.     
  56.     /**  
  57.      * MD5加密  
  58.      *   
  59.      * @param data  
  60.      * @return  
  61.      * @throws Exception  
  62.      */    
  63.     public static byte[] encryptMD5(byte[] data) throws Exception {    
  64.     
  65.         MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);    
  66.         md5.update(data);    
  67.     
  68.         return md5.digest();    
  69.     
  70.     }    
  71.     
  72.     /**  
  73.      * SHA加密  
  74.      *   
  75.      * @param data  
  76.      * @return  
  77.      * @throws Exception  
  78.      */    
  79.     public static byte[] encryptSHA(byte[] data) throws Exception {    
  80.     
  81.         MessageDigest sha = MessageDigest.getInstance(KEY_SHA);    
  82.         sha.update(data);    
  83.     
  84.         return sha.digest();    
  85.     
  86.     }    
  87.     
  88.     /**  
  89.      * 初始化HMAC密钥  
  90.      *   
  91.      * @return  
  92.      * @throws Exception  
  93.      */    
  94.     public static String initMacKey() throws Exception {    
  95.         KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);    
  96.     
  97.         SecretKey secretKey = keyGenerator.generateKey();    
  98.         return encryptBASE64(secretKey.getEncoded());    
  99.     }    
  100.     
  101.     /**  
  102.      * HMAC加密  
  103.      *   
  104.      * @param data  
  105.      * @param key  
  106.      * @return  
  107.      * @throws Exception  
  108.      */    
  109.     public static byte[] encryptHMAC(byte[] data, String key) throws Exception {    
  110.     
  111.         SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);    
  112.         Mac mac = Mac.getInstance(secretKey.getAlgorithm());    
  113.         mac.init(secretKey);    
  114.     
  115.         return mac.doFinal(data);    
  116.     
  117.     }    
  118. }    

 

 

再交由三个测试类:

 

[java] view
plain
 copy

 

 电子商务 15电子商务 16

  1. import static org.junit.Assert.*;    
  2.     
  3. import org.junit.Test;    
  4.     
  5. /**  
  6.  *   
  7.  * @author 梁栋  
  8.  * @version 1.0  
  9.  * @since 1.0  
  10.  */    
  11. public class CoderTest {    
  12.     
  13.     @Test    
  14.     public void test() throws Exception {    
  15.         String inputStr = “简单加密”;    
  16.         System.err.println(“原文:/n” + inputStr);    
  17.     
  18.         byte[] inputData = inputStr.getBytes();    
  19.         String code = Coder.encryptBASE64(inputData);    
  20.     
  21.         System.err.println(“BASE64加密后:/n” + code);    
  22.     
  23.         byte[] output = Coder.decryptBASE64(code);    
  24.     
  25.         String outputStr = new String(output);    
  26.     
  27.         System.err.println(“BASE64解密后:/n” + outputStr);    
  28.     
  29.         // 验证BASE6肆加密解密壹致性    
  30.         assertEquals(inputStr, outputStr);    
  31.     
  32.         // 验证MD五对于同1内容加密是还是不是壹律    
  33.         assertArrayEquals(Coder.encryptMD5(inputData), Coder    
  34.                 .encryptMD5(inputData));    
  35.     
  36.         // 验证SHA对于同样内容加密是不是同样    
  37.         assertArrayEquals(Coder.encryptSHA(inputData), Coder    
  38.                 .encryptSHA(inputData));    
  39.     
  40.         String key = Coder.initMacKey();    
  41.         System.err.println(“Mac密钥:/n” + key);    
  42.     
  43.         // 验证HMAC对于同1内容,同壹密钥加密是不是相同    
  44.         assertArrayEquals(Coder.encryptHMAC(inputData, key), Coder.encryptHMAC(    
  45.                 inputData, key));    
  46.     
  47.         BigInteger md5 = new BigInteger(Coder.encryptMD5(inputData));    
  48.         System.err.println(“MD5:/n” + md5.toString(16));    
  49.     
  50.         BigInteger sha = new BigInteger(Coder.encryptSHA(inputData));    
  51.         System.err.println(“SHA:/n” + sha.toString(32));    
  52.     
  53.         BigInteger mac = new BigInteger(Coder.encryptHMAC(inputData, inputStr));    
  54.         System.err.println(“HMAC:/n” + mac.toString(16));    
  55.     }    
  56. }    

控制台出口:

 

 

[java] view
plain
 copy

 

 电子商务 17电子商务 18

  1. 原文:    
  2. 简易加密    
  3. BASE64加密后:    
  4. 566A5Y2V5Yqg5a+G    
  5.     
  6. BASE64解密后:    
  7. 粗略加密    
  8. Mac密钥:    
  9. uGxdHC+6ylRDaik++leFtGwiMbuYUJ6mqHWyhSgF4trVkVBBSQvY/a22xU8XT1RUemdCWW155Bke    
  10. pBIpkd7QHg==    
  11.     
  12. MD5:    
  13. -550b4d90349ad4629462113e7934de56    
  14. SHA:    
  15. 91k9vo7p400cjkgfhjh0ia9qthsjagfn    
  16. HMAC:    
  17. 2287d192387e95694bdbba2fa941009a    

 

 


0

Leave a Comment.