- 浏览: 306182 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
u014212273:
好文一枚
log4j日志配置 -
向奕昌:
你好,能否提供下你那个测试dll
Java调用.dll文件 -
GARUDA183:
谢谢分享。
Flex中文帮助文档以及ActionScript3的中文文档 -
木叶之舟:
感谢楼主分享
Flex中文帮助文档以及ActionScript3的中文文档 -
游其是你:
呵呵,谢谢啦,好人一生平安~
Flex中文帮助文档以及ActionScript3的中文文档
前段时间客户(某电信公司)要求,我们公司的产品需要实现与他们的一些Discuz! Passport 的应用程序相挂接,比如他们电信的PHP语言写的CMS系统、PHP语言写的BBS系统等等。具体挂接的流程各个应用程序都不相同,这里我把Discuz! Passport 的AzDGCrypt算法实现贴出来
java 代码
- package xml;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
- import com.sun.org.apache.xml.internal.security.utils.Base64;
- import java.io.UnsupportedEncodingException;
- import java.net.*;
- public class Key2 {
- /**
- * Passport 加密函数
- *
- * @param string 等待加密的原字串
- * @param string 私有密匙(用于解密和加密)
- *
- * @return string 原字串经过私有密匙加密后的结果
- */
- public String passport_encrypt(String txt,String key){
- //使用随机数发生器产生 0~32000 的值并 MD5()
- int j=(int)(Math.random()*32000);
- String encrypt_key = getMD5(Integer.toString(j));
- int ctr = 0;
- String tmp = "";
- for(int i = 0; i < txt.length(); i++) {
- // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
- ctr = ctr == encrypt_key.length()? 0 : ctr;
- // $tmp 字串在末尾增加两位,其第一位内容为 $encrypt_key 的第 $ctr 位,
- // 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1
- char a1=encrypt_key.charAt(ctr);
- char t1=txt.charAt(i);
- char t2=encrypt_key.charAt(ctr++);
- char a2=(char)(t1 ^ t2);
- tmp +=String.valueOf(a1)+a2;
- }
- return Base64.encode((passport_key(tmp,key)).getBytes());
- }
- /**
- * Passport 解密函数
- *
- * @param string 加密后的字串
- * @param string 私有密匙(用于解密和加密)
- *
- * @return string 字串经过私有密匙解密后的结果
- * @throws Base64DecodingException
- */
- public String passport_decrypt(String txt1,String key) throws Base64DecodingException {
- // $txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起,
- // 经过 passport_key() 函数处理后的返回值
- String txt = passport_key(new String(Base64.decode(txt1)), key);
- // 变量初始化
- String tmp = "";
- for (int i = 0; i < txt.length(); i++) {
- // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
- // 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
- tmp += (char)(txt.charAt(i) ^ txt.charAt(++i));
- }
- return tmp;
- }
- /**
- * Passport 密匙处理函数
- *
- * @param string 待加密或待解密的字串
- * @param string 私有密匙(用于解密和加密)
- *
- * @return string 处理后的密匙
- */
- public String passport_key(String txt,String encrypt_key1){
- // 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
- String encrypt_key = getMD5(encrypt_key1);
- // 变量初始化
- int ctr = 0;
- String tmp = "";
- for(int i = 0; i < txt.length(); i++) {
- // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
- ctr = ctr == encrypt_key.length() ? 0 : ctr;
- // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
- // 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
- tmp += (char)(txt.charAt(i) ^ encrypt_key.charAt(ctr++));
- }
- return tmp;
- }
- public static String byte2HEX(byte b) {
- return (""+"0123456789abcdef".charAt(0xf&b>>4)+"0123456789abcdef".charAt(b&0xF));
- }
- public static byte stringHEX2bytes(String str) {
- return (byte) ("0123456789abcdef".indexOf(str.substring(0,1))*16 + "0123456789abcdef".indexOf(str.substring(1)));
- }
- public static String md5bytes2string(byte[] bytes){
- String result = "";
- for(int i=0; i
- result += byte2HEX(bytes[i]);
- }
- return result;
- }
- public static byte[] md5string2bytes(String str){
- byte[] b = new byte[str.length()/2];
- for(int i=0; i
- String s = str.substring(i*2,i*2+2);
- b[i] = stringHEX2bytes(s);
- }
- return b;
- }
- public String getMD5(String mds){
- String mdresult="";
- try {
- MessageDigest md = MessageDigest.getInstance("MD5");
- mdresult = md5bytes2string(md.digest(mds.getBytes()));
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- }
- return mdresult;
- }
- }
以上的类经过MD5、随机、异或、私匙、Base64等处理,加密后相对还是较安全的。当然在Discuz! Passport 应用程序中一般都需要一个Vierfy验证码,也是将参数或指定内容加密后再传输,在应用程序中验证,如果不匹配则可能数据处理不正确或者在传输过程中被截获作了更改。这样验证后又增加了一定的安全性。
发表评论
-
身份证号码分析
2009-04-21 19:01 2919身份证号码工具类 身份证号码规则 摘自百度: [根 ... -
java源程序加密
2009-03-22 11:12 2155Java程序的源代码很容易 ... -
NoClassDefFoundError:org/jboss/mx/util/PropertyAcc
2009-01-15 17:14 4137在项目工程中,无故出现如下异常: java.lang.No ... -
JVM内存不足异常
2008-07-01 13:24 2522JVM内存不足异常 Web Server中布署项目,出现内 ... -
开发中一些常用的加密算法
2008-06-25 17:02 1370开发过程中常用的到的一些加密算法。 一般常用的有: MD5 ... -
Apache Ant包进行ZIP文件压缩
2008-05-27 00:47 5005Apache Ant包进行ZIP文件压 ... -
Oracle的varchar2(4000)插入汉字过长
2008-04-26 13:04 5561在使用oracle时,如果在一个varchar2(4000)的 ... -
定时执行任务的方法
2008-04-08 12:13 1980定时执行任务的三种方法: 1)java.util.Timer. ... -
JSP\Servlet中的Filter(过滤器)应用
2008-01-12 11:31 8093做B/S的企业级应用,可能会遇到这样一种情况,客户的文档(wo ... -
用get方法传递中文参数时出现乱码的解决方法
2007-12-28 11:04 4390可先用java.net.URLEncoder.encode(& ... -
Java调用.dll文件
2007-09-20 14:40 66038因为项目的需求,要在JAVA项目中调用Windows的Dll( ... -
关于读取配置文件Parsing failed.的问题
2007-09-07 17:12 13520今天将测试通过的应用,发给售前工程师在客户那进行安装,马上出现 ... -
Proxool连接池实现
2007-08-28 17:45 6888[code] 首先从 http://proxool.sour ... -
dbcp连接池实现
2007-08-27 17:22 13341DBCP是Apache的一个开源项目: commons.dbc ... -
log4j日志配置
2007-08-23 11:02 26067日志是应用软件中不可缺少的部分,Apache的开源项目Log4 ... -
Tomcat超过最大线程数出错,如何捕获异常
2007-08-22 12:56 5902Tomcat的server.xml中连接器设置如下 [code ... -
JDK5.0后的泛型程序设计
2007-08-17 11:36 6584之前了解学习了C#的语言特征,的确,C#是很好的面向对象的语言 ...
相关推荐
《Discuz!NT用户使用手册》是一份专为Discuz!NT系统用户设计的详尽指南,旨在帮助用户更好地理解和操作这一强大的社区论坛软件。Discuz!NT是基于.NET平台开发的一款开源社区软件,它提供了丰富的功能和高度的可定制...
此次发布的是Discuz! 4.0.0开源版本,除了API目录下一些合作的接口,出于对合作伙伴负责的态度仍然加密外,其他全部源代码均被提供。如果不使用相关的功能,API目录可以被删除而不影响非相关功能的使用。 <br>...
【标题】"Discuz! 黑白风格"指的是基于Discuz! X系统的一款主题模板,它采用了简洁的黑白设计,营造出一种高端、专业的社区氛围。Discuz! 是一款非常流行的开源论坛软件,广泛应用于各类网站,提供强大的社区管理...
Discuz!是一款非常知名的开源社区论坛软件,由Comsenz公司开发,自2001年发布以来,它已经成为许多网站构建在线社区的首选平台。"Discuz!-1.0"是该软件的最早版本,对于理解Discuz!的发展历程和源代码结构具有重要的...
Discuz!X3.5和X3.4是流行的开源社区论坛系统,它们为企业和个人提供了构建互动社区的强大工具。为了增强这些平台的安全性,腾讯云开发了一款名为“tencentcloud_captcha”的官方插件。这款插件的核心功能是集成腾讯...
《Discuz! -tools工具详解:优化与管理论坛图片附件的利器》 Discuz! -tools工具是一款专为Discuz! 论坛系统设计的强大辅助工具,尤其适用于x2.5、x3.0、x3.1、x3.2、x3.4等不同版本。这款工具被广大论坛管理员亲切...
《Discuz!3风格适配Discuz!2.0详解》 Discuz!3风格是专为Discuz!2.0论坛系统设计的一款界面样式,它致力于提供更加现代、美观且用户友好的交互体验。这款风格的引入,使得论坛的整体视觉效果与功能布局有了显著的...
【Discuz!NT 论坛源码】是一个基于ASP.NET技术构建的社区论坛软件,它为网站管理员提供了构建和管理在线社区的强大工具。这个源码是 Discuz!NT 的核心组成部分,允许用户深入理解其工作原理,并进行自定义开发以满足...
NT 3.0采用了一系列加密算法来保证安全性,Discuz!NT 官方发布的API应用都可以放心使用,第三方开发的应用需要经过Discuz!NT 官方认证,用户大可以放心使用。Discuz!NT 3.0的API的又一大改进是支持客户端调用,基于...
Discuz!7.2用户手册..................
一 、Discuz!NT 2.0 ,Discuz!NT 2.1 升级到 Discuz!NT 2.5 正式版 空间和相册的升级 1 需要上传覆盖论坛目录中 admin/xml/ 目录下的 navmenu.config ,navmenu.js 文件。 2 根据插件包内 album 目录下《Discuz!NT...
Discuz! 3.2 完美英文语言包是一款专为Discuz! 3.2论坛系统设计的多语言资源,旨在为非中文环境下的用户提供流畅的使用体验。这款语言包包含了论坛系统的所有核心功能模块的英文翻译,确保了用户在浏览、发帖、管理...
Discuz!NT是一款基于.NET平台的论坛系统,而Discuz!X是基于PHP语言的社区软件,两者在架构上存在较大差异。"Discuz!NT转Discuz!X工具"是为了帮助用户将原有的Discuz!NT论坛数据平滑迁移至Discuz!X系统,以实现数据的...
【标题】"Discuz! v1.0 正式版" 涉及的主要知识点是Discuz!这一知名论坛系统的早期版本。Discuz!是由康盛创想(Comsenz)公司开发的一款开源的社区论坛软件,广泛应用于搭建和管理互联网上的论坛社区。 【描述】中...
Discuz! 是一款非常流行的开源社区论坛软件,它允许用户创建和管理自己的在线论坛,具有丰富的功能和高度的可定制性。在这个特定的压缩包中,我们关注的是“论坛版块图标”,这些图标用于区分和装饰论坛的不同版块,...
《Discuz!NT2.5:C#构建的开源论坛系统》 Discuz!NT V2.5是一款基于VS2008和C#开发的开源论坛程序,它以其强大的功能和灵活的扩展性,深受广大开发者和网站管理员的喜爱。这款论坛系统不仅提供了基本的讨论区、主题...
标题"Discuz! X3.1"指的是 Discuz! 系统的一个具体版本,即X3.1。Discuz! 是一个非常知名的开源社区论坛软件,由康盛创想(Comsenz)开发。X3.1是其在某个时间点推出的更新版本,通常会包含对前一版本的改进、新功能...
Discuz!是一款非常流行的开源社区论坛系统,深受许多网站管理员的喜爱。这个压缩包"去掉DZ自带首页发帖按钮 for discuz!.rar"是专为Discuz!设计的一个插件,目的是为了移除默认首页上的“发帖”按钮。这个功能可能对...