`
MMSCAU
  • 浏览: 114490 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Jive 2.5 SkinUtils.java 中的 encodePasswordCookie decodePasswordCookie

阅读更多
package code;

public class T3 {
	private final static int  ENCODE_XORMASK = 0x5A; // 十六进制 90
    private final static char ENCODE_DELIMETER = '\002'; // \转义字符 stx
    private final static char ENCODE_CHAR_OFFSET1 = 'A';
    private final static char ENCODE_CHAR_OFFSET2 = 'h';
	public static void main(String[] args) {
		System.out.println(T3.encodePasswordCookie("chen", "chen"));
		System.out.println(T3.decodePasswordCookie("JkDkJkDkMmMkIhEhMh"));
	}
	
    private static String encodePasswordCookie(String username, String password)
    {
        StringBuffer buf = new StringBuffer();
        if (username != null && password != null) {
            byte[] bytes = (username + ENCODE_DELIMETER + password).getBytes(); //String.getBytes()使用给定的 charset 将此 String 
                                                                                           //编码到 byte 序列,并将结果存储到新的 byte 数组对象
            int b;

            for (int n = 0; n < bytes.length; n++) {
                b = bytes[n] ^ (ENCODE_XORMASK + n);  // ^ 表示异或
                buf.append((char)(ENCODE_CHAR_OFFSET1 + (b & 0x0F))); //& 与
                buf.append((char)(ENCODE_CHAR_OFFSET2 + ((b >> 4) & 0x0F))); //>>右移
            }
        }
        return buf.toString();
    }

    private static String[] decodePasswordCookie( String cookieVal ) {

        // check that the cookie value isn't null or zero-length
        if( cookieVal == null || cookieVal.length() <= 0 ) {
            return null;
        }

        // unrafel the cookie value
        char[] chars = cookieVal.toCharArray();
        byte[] bytes = new byte[chars.length / 2];
        int b;
        for (int n = 0, m = 0; n < bytes.length; n++) {
            b = chars[m++] - ENCODE_CHAR_OFFSET1;
                                        //m开始为0

           b |= (chars[m++] - ENCODE_CHAR_OFFSET2) << 4;
                                        //m开始为1

           bytes[n] = (byte)(b ^ (ENCODE_XORMASK + n));
        }
        cookieVal = new String(bytes);
        int	pos = cookieVal.indexOf(ENCODE_DELIMETER);
        String username = (pos < 0) ? "" : cookieVal.substring(0, pos);
        String password = (pos < 0) ? "" : cookieVal.substring(pos + 1);
         
         //添加一个输出测试
        System.out.println("用户名:"+username+"\n"+"密码:"+password);
        return new String[] {username, password};
    }

}
 

结果:

JkDkJkDkMmMkIhEhMh
用户名:chen
密码:chen

 

用表格分析encode

字符 ASCII ENCODE_XORMASK+n 二^三列的运算结果(异或)
c 1100011 1011010     n=0 111001
h 1101000 1011011     n=1 110011
e 1100101 1011100 111001
n 1101110 1011101 110011
\002 stx 0000010 1011110 1011100
c 1100011 1011111 111100
h 1101000 1100000 1000
e 1100101 1100001 100
n 1101110 1100010 1100

 

 b = bytes[n] ^ (ENCODE_XORMASK + n);   //上表的第四列结果

//第一个append的是  b的低4位 +'A' =X
 buf.append((char)(ENCODE_CHAR_OFFSET1 + (b & 0x0F))); //& 与

 //第二个append的是 b的高4为 +'h' =Y
 buf.append((char)(ENCODE_CHAR_OFFSET2 + ((b >> 4) & 0x0F))); //>>右移

 

 decode译码过程(X-'A')|[(Y-'h')<<4] 最终再一个异或

分享到:
评论

相关推荐

    jive 2.5 源代码

    1. **环境准备**:确保系统满足Jive 2.5的运行环境,包括Java运行环境(JRE)、数据库服务(如MySQL或Oracle)和合适的服务器环境(如Tomcat或Jetty)。 2. **解压源代码**:将"jivejdon-2.5"压缩包解压到指定目录,...

    ant-jive-edition.jar.zip

    《Ant与Jive Edition在Java开发中的应用及详解》 Ant和Jive Edition是Java开发中两个重要的工具,它们在构建、部署和管理Java项目中起着关键作用。本文将深入探讨这两个工具以及它们在jar.zip包中的使用。 首先,...

    jive 2.6 原码.zip

    1. **框架与技术栈**:Jive 2.6可能采用了Java EE(企业级Java)作为基础平台,这可能包括Servlet、JSP、EJB等技术,同时,它也可能使用了Spring框架来管理依赖和控制流程,Hibernate作为ORM工具处理数据库操作。...

    Jive源代码.zip

    源代码中的JdonFramework是Jive的重要组成部分,这是一个轻量级、高效的框架,用于构建可扩展和高性能的Web应用程序。JdonFramework的设计理念是“简洁、灵活”,它提供了一种模块化的方法来组织和管理应用的组件,...

    jive2.6.rar_bbs论坛系统_jive_jive2._jive2.6

    《Jive 2.6:一个基于JSP/JAVA的大型BBS论坛系统解析》 Jive是一款由Java技术和JSP(JavaServer Pages)构建的高效、强大的BBS(Bulletin Board System,公告板系统),其2.6版本是该系统的经典之作。作为一个面向...

    Jive开放源码.rar

    版本号2.5表明这可能是Jive发展中的一个重要里程碑,通常包含了稳定的功能和改进。源码中可能包括了Jive的核心服务、用户界面、数据存储、安全机制以及社交网络的各种组件,例如论坛、博客、文档共享等。 1. **核心...

    学习JavaEE的两个著名工程PetStore和Jive论坛二合一

    在JavaEE的学习过程中,有两个著名的示例项目,即PetStore和Jive论坛,这两个项目都是JavaEE开发的经典案例,有助于初学者理解并掌握JavaEE的核心概念和技术。 PetStore项目: 1. **MVC设计模式**:PetStore项目...

    org.jivesoftware.smack-3.2.2.jar

    org.jivesoftware.smack-3.2.2.jar

    ant-jive-edition.jar

    官方版本,亲测可用

    Jive(Jdon版)源代码

    1.数据库安装,database目录中选择对应数据库如jive_mysql.sql 在你数据库服务器上建立数据库名Jive 导入jive_mysql.sql 2.Tomcat配置,Tomcat使用4.01以上,如果你使用mysql,请使用database目录下的mm.mysql-...

    java学习必学系统--jive

    在Java开发者的学习路径中,掌握Jive不仅能提升你的Web开发技能,还能拓宽你在企业级应用开发领域的视野。 首先,我们来了解一下Jive的基本概念。Jive基于Java技术构建,采用了服务导向架构(SOA),支持RESTful ...

    Jive java版源码

    《Jive Java版源码深度解析与设计模式探讨》 Jive是一款著名的社交软件平台,其Java版本的源码对于开发者来说,是一份极其宝贵的参考资料。深入研究Jive的源码,不仅可以帮助我们理解大型社交系统的架构设计,也能...

    Jive的安装指导。

    - 设置`jiveHome`属性为Jive主目录的绝对路径,例如`jiveHome=C:\\javasource\\jive\\jiveHome`。 2. **启动Tomcat服务**: - 启动Tomcat服务,可以通过命令行或者图形界面进行操作。 - 访问`...

    Jive论坛原代码.rar

    通过研究Jive论坛的源代码,我们可以深入了解JAVA在大型社区应用中的实际运用,以及如何运用设计模式来构建可扩展、易维护的系统。 首先,让我们关注“Jive论坛”的核心功能。Jive论坛主要由用户管理、论坛版块、...

    openfire3.8.2API

    Openfire 3.8.2 API 是一个专为开发者设计的接口文档,它提供了一系列用于构建基于XMPP(Extensible Messaging and Presence ...在实践中,不断参考API文档,结合实际案例进行练习,是掌握Openfire API的关键步骤。

    jive.chm

    系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 &lt;br&gt; 设计模式 1 大道至简-Java之23种模式一点就通 2 设计模式...

    jive安装实例jive安装实例jive安装实例

    2. 将 Jive 中 `application` 文件夹下的所有文件复制到这个新创建的 `jive.war` 目录中。 **第四步:配置 Jive 初始化属性** 编辑 `WEB-INF/classes/jive_init.properties` 文件,将 `jiveHome` 的值更改为 Jive ...

    jive-1_0.zip_jive

    2. **jive-1.0**:这很可能是 Jive Forums 1.0 版本的源代码目录,其中可能包含了各种源代码文件(如 .java 文件,用于 Java 编程)、配置文件、资源文件(如图片、CSS 和 JavaScript)以及构建脚本等。通常,一个...

    Java技术文档常用网址

    Java API Docs 是 Java 开发者不可或缺的参考资料,它详尽地列出了 Java 语言和标准库的所有类、接口、方法及构造器。这些文档通常由官方发布,为开发者提供了清晰的函数签名、描述、示例代码,帮助理解如何正确使用...

    Blowfish_java_javablowfish_

    在Java中,开发者可以使用`javablowfish`库来实现Blowfish算法,以便进行数据的加密和解密操作。下面将详细阐述Blowfish算法的核心概念、Java实现以及如何在实际应用中使用。 一、Blowfish算法基础 Blowfish算法是...

Global site tag (gtag.js) - Google Analytics