AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
2015-09-07 02:03
801 查看
转:http://my.oschina.net/Jacker/blog/86383
先简单从百度找来介绍:
?
AES加密模式和填充方式(其实还有还几种填充方式没写上,开始时候也在这里绕了一下)
?
更多关于加密模式内容:http://blog.sina.com.cn/s/blog_679daa6b0100zmpp.html
看到这么多模式,已经有点头晕了,那我的目标是希望找到 PHP、Javascript、Java、C# 的AES加密模式一个交集;
又经过一轮查找,资讯了百度谷歌这两位老师之后,找到了一篇关于PHP和Java的AES互通兼容加密文章,看完之后
发现了原来PHP的AES加密填充只有ZeroPadding(补零 - 因为数据长度不是16的整数倍就需要填充),而Java是没
有这种填充模式,杯具的只能自己写一个了,那Java的填充模式就用NoPadding(不填充内容);
Java端代码:
?
这里需要强调的就是Java的填充模式是NoPadding,用自己的编写的补零填充内容;
PHP端代码:
?
最后发现PHP的AES加密是四种语言中最容易实现的!就是填充模式比较鸡肋,或者是本人小菜还没发现啦;
C#端代码:
?
C#不用怎么说了!微软的东西就是好使,VS编辑器提示很友好,而且资料好找;
最后就是javascript端的实现,这个是最杯具的,花的时间是最多,也是难倒了很多刚入门的小菜;
一开始我是先想到在os找一插件快速解决(CryptoJS),但是结果并不如意,加密解密后的内容总是乱码不对,最后
找啊找,看了很多的国外的资料,翻樯去google论坛和stackoverflow等网站,最后得到了一些零星的资料,终于解
决掉问题,原来是密匙的编码导致;(中间试了很多很多代码,翻了很多资料,筛选了无数资料,原来坚持是有回
报的)
Javascript端代码:
?
按照官方例子就是失败,核心的aes.js又加密混淆了!唉!想找点线索都难。
最后需要提醒总结的是,密匙key和IV需要一致,编码要正确,不然会绕很多冤枉路,希望能帮到以后需要用的人;
补充一下,就是全部加密都是 AES/CBC/ZeroPadding 128位模式;
先简单从百度找来介绍:
?
?
看到这么多模式,已经有点头晕了,那我的目标是希望找到 PHP、Javascript、Java、C# 的AES加密模式一个交集;
又经过一轮查找,资讯了百度谷歌这两位老师之后,找到了一篇关于PHP和Java的AES互通兼容加密文章,看完之后
发现了原来PHP的AES加密填充只有ZeroPadding(补零 - 因为数据长度不是16的整数倍就需要填充),而Java是没
有这种填充模式,杯具的只能自己写一个了,那Java的填充模式就用NoPadding(不填充内容);
Java端代码:
?
PHP端代码:
?
C#端代码:
?
最后就是javascript端的实现,这个是最杯具的,花的时间是最多,也是难倒了很多刚入门的小菜;
一开始我是先想到在os找一插件快速解决(CryptoJS),但是结果并不如意,加密解密后的内容总是乱码不对,最后
找啊找,看了很多的国外的资料,翻樯去google论坛和stackoverflow等网站,最后得到了一些零星的资料,终于解
决掉问题,原来是密匙的编码导致;(中间试了很多很多代码,翻了很多资料,筛选了无数资料,原来坚持是有回
报的)
Javascript端代码:
?
最后需要提醒总结的是,密匙key和IV需要一致,编码要正确,不然会绕很多冤枉路,希望能帮到以后需要用的人;
补充一下,就是全部加密都是 AES/CBC/ZeroPadding 128位模式;
相关文章推荐
- JavaScript语言精粹 笔记02 函数
- Ember.js 入门指南——目录
- Ember.js 入门指南——目录
- Ember.js 入门指南——扩展(reopen)
- Ember.js 入门指南——类的定义、初始化、继承
- javascript插件开发设计中的疑问与总结
- Js 常用调试的方法
- JavaScript设计模式
- JSONP实现跨域
- ExtJs基础
- 黑马程序员——JavaScript(上)
- 数组的length属性,只是下标数字+1。和数组对象的属性有多少个,方法有多少个没关系。
- JsonModel的使用
- javascript slice()方法
- 《你不知道的JavaScript》读书笔记(二)词法作用域
- js中的Error对象
- JavaScript中的继承
- js中arguments的用法
- 如何用 js 递归输出树型
- js中使用||赋值