Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。(来源百度百科)
java实现代码:
package?com.cn.单向加密;import?sun.misc.BASE64Decoder;import?sun.misc.BASE64Encoder;/* BASE64的加密解密是双向的,可以求反解. BASE64Encoder和BASE64Decoder是非官方JDK实现类。虽然可以在JDK里能找到并使用,但是在API里查不到。 JRE?中?sun?和?com.sun?开头包的类都是未被文档化的,他们属于?java,?javax?类库的基础,其中的实现大多数与底层平台有关, 一般来说是不推荐使用的。? BASE64?严格地说,属于编码格式,而非加密算法? 主要就是BASE64Encoder、BASE64Decoder两个类,我们只需要知道使用对应的方法即可。 另,BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。? BASE64? 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。 (The?Base64?Content-Transfer-Encoding?is?designed?to?represent?arbitrary?sequences?of?octets?in?a?form?that?need?not?be?humanly?readable.)? 常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。 */public?class?BASE64?{ ????/**?? ?????*?BASE64解密?? ?????*??? ?????*?@param?key?? ?????*?@return?? ?????*?@throws?Exception?? ?????*/?? ????public?static?byte[]?decryptBASE64(String?key)?throws?Exception?{??? ????????return?(new?BASE64Decoder()).decodeBuffer(key);??? ????}??? ????/**?? ?????*?BASE64加密?? ?????*??? ?????*?@param?key?? ?????*?@return?? ?????*?@throws?Exception?? ?????*/?? ????public?static?String?encryptBASE64(byte[]?key)?throws?Exception?{??? ????????return?(new?BASE64Encoder()).encodeBuffer(key);??? ????}?? ????public?static?void?main(String[]?args)?{ ?????String??str="12345678"; ????????try?{ ????????String??result1=?BASE64.encryptBASE64(str.getBytes()); ?????????System.out.println("result1=====加密数据=========="+result1); ?????????byte??result2[]=?BASE64.decryptBASE64(result1); ?????????String??str2=new?String(result2); ?????????System.out.println("str2========解密数据========"+str2); ????}?catch?(Exception?e)?{ ????????e.printStackTrace(); ????} ????}}
?
?
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。广泛用于加密和解密技术,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文件是否一致的。
java实现代码:
package?com.cn.单向加密;import?java.math.BigInteger;import?java.security.MessageDigest;/* MD5(Message?Digest?algorithm?5,信息摘要算法)? 通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE64再加密一把,得到相应的字符串 Digest:汇编 */public?class?MD5?{ ????public?static?final?String?KEY_MD5?=?"MD5";??? ????public?static??String??getResult(String?inputStr) ????{ ????????System.out.println("=======加密前的数据:"+inputStr); ????????BigInteger?bigInteger=null; ????????try?{ ?????????MessageDigest?md?=?MessageDigest.getInstance(KEY_MD5);??? ?????????byte[]?inputData?=?inputStr.getBytes();? ?????????md.update(inputData);??? ?????????bigInteger?=?new?BigInteger(md.digest());??? ????????}?catch?(Exception?e)?{e.printStackTrace();} ????????System.out.println("MD5加密后:"?+?bigInteger.toString(16));??? ????????return?bigInteger.toString(16); ????} ????public?static?void?main(String?args[]) ????{ ????????try?{ ?????????????String?inputStr?=?"简单加密8888888888888888888";??? ?????????????getResult(inputStr); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????}}
?
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
?
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。该算法经过加密专家多年来的发展和改进已日益完善,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种"指纹"或是"摘要"所以对散列值的数字签名就可以视为对此明文的数字签名。
java实现代码:
package?com.cn.单向加密;import?java.math.BigInteger;import?java.security.MessageDigest;/* SHA(Secure?Hash?Algorithm,安全散列算法),数字签名等密码学应用中重要的工具, 被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了,? 但是SHA仍然是公认的安全加密算法,较之MD5更为安全*/public?class?SHA?{ ?????public?static?final?String?KEY_SHA?=?"SHA";??? ????public?static??String??getResult(String?inputStr) ????{ ????????BigInteger?sha?=null; ????????System.out.println("=======加密前的数据:"+inputStr); ????????byte[]?inputData?=?inputStr.getBytes();??? ????????try?{ ?????????????MessageDigest?messageDigest?=?MessageDigest.getInstance(KEY_SHA);?? ?????????????messageDigest.update(inputData); ?????????????sha?=?new?BigInteger(messageDigest.digest());??? ?????????????System.out.println("SHA加密后:"?+?sha.toString(32));??? ????????}?catch?(Exception?e)?{e.printStackTrace();} ????????return?sha.toString(32); ????} ????public?static?void?main(String?args[]) ????{ ????????try?{ ?????????????String?inputStr?=?"简单加密";??? ?????????????getResult(inputStr); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????}}
?
?
因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
l 对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
l 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
l 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
?
HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。
java实现代码:
package?com.cn.单向加密;/* HMAC? HMAC(Hash?Message?Authentication?Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。 消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。 使用一个密钥生成一个固定大小的小数据块, 即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。*/import?javax.crypto.KeyGenerator;import?javax.crypto.Mac;import?javax.crypto.SecretKey;import?javax.crypto.spec.SecretKeySpec;import?com.cn.comm.Tools;/**?? ?*?基础加密组件?? ?*/??public?abstract?class?HMAC?{??? ????public?static?final?String?KEY_MAC?=?"HmacMD5";??? ????/**?? ?????*?初始化HMAC密钥?? ?????*??? ?????*?@return?? ?????*?@throws?Exception?? ?????*/?? ????public?static?String?initMacKey()?throws?Exception?{??? ????????KeyGenerator?keyGenerator?=?KeyGenerator.getInstance(KEY_MAC);??? ????????SecretKey?secretKey?=?keyGenerator.generateKey();??? ????????return?BASE64.encryptBASE64(secretKey.getEncoded());??? ????}??? ????/**?? ?????*?HMAC加密??:主要方法 ?????*??? ?????*?@param?data?? ?????*?@param?key?? ?????*?@return?? ?????*?@throws?Exception?? ?????*/?? ????public?static?String?encryptHMAC(byte[]?data,?String?key)?throws?Exception?{??? ????????SecretKey?secretKey?=?new?SecretKeySpec(BASE64.decryptBASE64(key),?KEY_MAC);??? ????????Mac?mac?=?Mac.getInstance(secretKey.getAlgorithm());??? ????????mac.init(secretKey);??? ????????return?new?String(mac.doFinal(data));??? ????}??? ????public?static??String??getResult1(String?inputStr) ????{ ????????String?path=Tools.getClassPath(); ????????String?fileSource=path+"/file/HMAC_key.txt"; ????????System.out.println("=======加密前的数据:"+inputStr); ????????String??result=null; ????????try?{ ????????????byte[]?inputData?=?inputStr.getBytes();? ????????????String?key?=?HMAC.initMacKey();?/*产生密钥*/?? ????????????System.out.println("Mac密钥:==="?+?key);?? ????????????/*将密钥写文件*/ ????????????Tools.WriteMyFile(fileSource,key); ????????????result=?HMAC.encryptHMAC(inputData,?key); ????????????System.out.println("HMAC加密后:==="?+?result);? ????????}?catch?(Exception?e)?{e.printStackTrace();}?? ???????return?result.toString(); ????} ????public?static??String??getResult2(String?inputStr) ????{ ????????System.out.println("=======加密前的数据:"+inputStr); ?????????String?path=Tools.getClassPath(); ?????????String?fileSource=path+"/file/HMAC_key.txt"; ?????????String?key=null;; ????????try?{ ?????????????/*将密钥从文件中读取*/ ?????????????key=Tools.ReadMyFile(fileSource); ?????????????System.out.println("getResult2密钥:==="?+?key);?? ????????}?catch?(Exception?e1)?{ ????????????e1.printStackTrace();} ????????String??result=null; ????????try?{ ????????????byte[]?inputData?=?inputStr.getBytes();?? ????????????/*对数据进行加密*/ ????????????result=?HMAC.encryptHMAC(inputData,?key); ????????????System.out.println("HMAC加密后:==="?+?result);? ????????}?catch?(Exception?e)?{e.printStackTrace();}?? ???????return?result.toString(); ????} ????public?static?void?main(String?args[]) ????{ ????????try?{ ?????????????String?inputStr?=?"简单加密";? ?????????????/*使用同一密钥:对数据进行加密:查看两次加密的结果是否一样*/ ?????????????getResult1(inputStr);? ?????????????getResult2(inputStr); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????}}
?
获取【下载地址】? ?QQ: 313596790? ?【免费支持更新】
A 代码生成器(开发利器);? ? B 阿里巴巴数据库连接池druid;
??数据库连接池??阿里巴巴的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势
C 安全权限框架shiro ;??D ehcache 自定义二级缓存;
E 微信接口开发(后续会加入Activiti5 工作流 )免费升级
-------------------------------------------------------------------------------------------------------------------------
1. 模块化、服务化,流程化,耦合度低、扩展性好,灵活度高,工具类封装完整,干净利索,调用简单方便
2. 提供Rest服务,支持APP手机应用(android和ios)接口、php、.net、易语言、VB等第三方接口调用
3. 全新高大尚HTML5+css3.0+bootstrap响应式开发界面UI,( 手机 PC 平板 截图在下面)、前沿.??spring restful 风格
4. 框架搭建完善成熟,在此基础上做过很多项目,系统具有并发处理、分布式、稳定性。
5. 系统功能完善,此为框架平台,文档、注释齐全,提供技术支持,专门供二次开发
6. 在此基础上可二次开发(OA、ERP、CRM ,医疗管理、金融、网站后台、APP后台、电子商务、商城(赠送UI)等等
7.我们这边是公司,主要业务是定制开发,??此系统为我们平时给客户做项目用的,经过很多项目实战考验
??-------------------------------------------------------------------------------------------------------------------------系统模块
1. 组织管理:角色管理,分角色组和成员,有组权限和成员权限。
2. 系统用户:对各个基本的组会员增删改查,单发、群发邮件短信,导入导出excel表格,批量删除
3. 会员管理:对前台用户管理,分配会员级别,到期时间,状态,联系信息等资料
4. 菜单管理:增删改查菜单 ztree(自定义菜单)业务菜单和系统菜单分离
5. 数据字典:无限级别,支持多级别无限分类。内设编号,排序等
6. 系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置
7. 代码生成:打开代码生成器模块? ???
8. 图库管理:对批量上传的图片统一管理
9. 性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等
10. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间
11. 发送邮件:单发,群发邮件? ?
12. 置二维码:生成 or??解析二维码? ???
13.地图工具:经纬度操作
14.即时通讯:打开即时聊天窗口
15.在线管理:(统计在线人数和在线列表,可强制某用户下线),同一用户只能在一个客户端登录
16.打印测试:页面打印预览测试
-------------------------------------------------------------------------------------------------------------------------
菜单权限:分配给每个角色不同的菜单权限, 每个角色看到的菜单不同
按钮权限:独立分配不同的角色不同的功能权限,增删改查权限分配具体到不同的菜单
支持多用户分权限管理后台,??权限具体到不同的菜单不同的按钮
--------------------------------------------------------------------------------------------------------------信息模块(小项目代码中)
新闻管理:新闻的维护、发布、权重排序等 采用百度ueditor富文本框
公告管理:公告的维护、发布
广告管理:广告的维护、发布,状态维护,上传广告图片
友情链接:友情链接的维护、状态维护
特别推荐:特别推荐、状态维护
微信模块
关注回复:微信用户关注公众号回复
文本回复:匹配关键词进行文本回复
图文回复:匹配关键词进行图文回复
应用命令:匹配关键词进行命令操作,例如微信发送命令,执行服务器重启、关机、锁定等操作
-------------------------------------------------------------------------------------------------------------------------
技术点
1. 导出 导入 excel 文件
2??导出word文件
3. IO 流上传下载文件
4. 群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件)
5. 群发or单独 发送短信,支持两种第三方短信商接口
6. spring? ?aop??事物处理
7. 代码生成器 (freemarker), 代码 zip 压缩打包
8. MD5加密 SHA加密(登录密码用此加密)接口加密身份校验
9. 数据库连接池??阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发
10.加入安全框架 shiro (登录授权)(session管理)
11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名)
12.app接口@ResponseBody(支持与其它语言数据交互)
13.极光推送 (推送给APP及时消息,APP不启动也能收到)
14.微信接口(身份验证,文本、图文回复等) 微信远程控制服务器重启、锁定、其它应用程序
15.java Quartz 定时器 (定时执行某程序,精确到秒,可设置周期)
16.java websocket 即时通讯技术,点对点,群聊,单聊,EXT4对话框
17.新增Lucene全文检索
18.Base64传输图片
19.图片加水印(图片水印,文字水印)
20.生成 or??解析 二维码
21.HTML5 + JAVAEE??WebSocket 通信技术,WebSocket 验证用户登录,强制某用户下线
22.批量异步上传图片,可预览,有进度条,支持拖拽上传(百度webuploader )。列表动态滑动放大展示。
23.ehcache 自定义二级缓存 ,选择缓存存放目录,处理并发,增加系统性能
24.服务器内部GET POST 请求
25.uploadify 上传插件,单条、批量上传多线程,带进度条,异步,图片、视频, 其它文件格式均可上传
26.地图选点获取经纬度坐标,根据俩经纬度计算距离
27.tab标签页面功能,标签自由切换,不重复操作数据库
-------------------------------------------------------------------------------------------------------------------------
系统框架为:springmvc + mybaits 3.2 有 maven 版本和 非maven 版本 jdk 1.6 1.7 1.8??tomcat 6 7 8
数据库:oracle 版本 和 msyql 版本 ( spring3.0 和4.02??mybaits 3.2)? ???开发工具:myeclipse??eclipse 均可
赠送 同UI? ?? ?springmvc + hibernate??SpringSecurity Lucene Quartz MySQL、Oracle、SQL Server
赠送 同UI??maven 分模块项目 springmvc + mybatis
-------------------------------------------------------------------------------------------------------------------------
系统演示视频:链接: http://pan.baidu.com/s/1kThEHb5 密码: t987 之前录的(有点粗糙, 凑合着看)
qq:313596790
--------------------------------------------------------------------------------------------------------------------
PC实物截图如下
登录界面背景用HTML5特效自动切换(百叶窗,幕布等多种切换方式)
获取【下载地址】? ?QQ: 313596790
原文:http://da29291673.iteye.com/blog/2244901