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] 最终再一个异或
分享到:
相关推荐
1. **环境准备**:确保系统满足Jive 2.5的运行环境,包括Java运行环境(JRE)、数据库服务(如MySQL或Oracle)和合适的服务器环境(如Tomcat或Jetty)。 2. **解压源代码**:将"jivejdon-2.5"压缩包解压到指定目录,...
《Ant与Jive Edition在Java开发中的应用及详解》 Ant和Jive Edition是Java开发中两个重要的工具,它们在构建、部署和管理Java项目中起着关键作用。本文将深入探讨这两个工具以及它们在jar.zip包中的使用。 首先,...
1. **框架与技术栈**:Jive 2.6可能采用了Java EE(企业级Java)作为基础平台,这可能包括Servlet、JSP、EJB等技术,同时,它也可能使用了Spring框架来管理依赖和控制流程,Hibernate作为ORM工具处理数据库操作。...
源代码中的JdonFramework是Jive的重要组成部分,这是一个轻量级、高效的框架,用于构建可扩展和高性能的Web应用程序。JdonFramework的设计理念是“简洁、灵活”,它提供了一种模块化的方法来组织和管理应用的组件,...
《Jive 2.6:一个基于JSP/JAVA的大型BBS论坛系统解析》 Jive是一款由Java技术和JSP(JavaServer Pages)构建的高效、强大的BBS(Bulletin Board System,公告板系统),其2.6版本是该系统的经典之作。作为一个面向...
版本号2.5表明这可能是Jive发展中的一个重要里程碑,通常包含了稳定的功能和改进。源码中可能包括了Jive的核心服务、用户界面、数据存储、安全机制以及社交网络的各种组件,例如论坛、博客、文档共享等。 1. **核心...
在JavaEE的学习过程中,有两个著名的示例项目,即PetStore和Jive论坛,这两个项目都是JavaEE开发的经典案例,有助于初学者理解并掌握JavaEE的核心概念和技术。 PetStore项目: 1. **MVC设计模式**:PetStore项目...
org.jivesoftware.smack-3.2.2.jar
官方版本,亲测可用
1.数据库安装,database目录中选择对应数据库如jive_mysql.sql 在你数据库服务器上建立数据库名Jive 导入jive_mysql.sql 2.Tomcat配置,Tomcat使用4.01以上,如果你使用mysql,请使用database目录下的mm.mysql-...
在Java开发者的学习路径中,掌握Jive不仅能提升你的Web开发技能,还能拓宽你在企业级应用开发领域的视野。 首先,我们来了解一下Jive的基本概念。Jive基于Java技术构建,采用了服务导向架构(SOA),支持RESTful ...
《Jive Java版源码深度解析与设计模式探讨》 Jive是一款著名的社交软件平台,其Java版本的源码对于开发者来说,是一份极其宝贵的参考资料。深入研究Jive的源码,不仅可以帮助我们理解大型社交系统的架构设计,也能...
- 设置`jiveHome`属性为Jive主目录的绝对路径,例如`jiveHome=C:\\javasource\\jive\\jiveHome`。 2. **启动Tomcat服务**: - 启动Tomcat服务,可以通过命令行或者图形界面进行操作。 - 访问`...
通过研究Jive论坛的源代码,我们可以深入了解JAVA在大型社区应用中的实际运用,以及如何运用设计模式来构建可扩展、易维护的系统。 首先,让我们关注“Jive论坛”的核心功能。Jive论坛主要由用户管理、论坛版块、...
Openfire 3.8.2 API 是一个专为开发者设计的接口文档,它提供了一系列用于构建基于XMPP(Extensible Messaging and Presence ...在实践中,不断参考API文档,结合实际案例进行练习,是掌握Openfire API的关键步骤。
系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 <br> 设计模式 1 大道至简-Java之23种模式一点就通 2 设计模式...
2. 将 Jive 中 `application` 文件夹下的所有文件复制到这个新创建的 `jive.war` 目录中。 **第四步:配置 Jive 初始化属性** 编辑 `WEB-INF/classes/jive_init.properties` 文件,将 `jiveHome` 的值更改为 Jive ...
Java API Docs 是 Java 开发者不可或缺的参考资料,它详尽地列出了 Java 语言和标准库的所有类、接口、方法及构造器。这些文档通常由官方发布,为开发者提供了清晰的函数签名、描述、示例代码,帮助理解如何正确使用...
2. **jive-1.0**:这很可能是 Jive Forums 1.0 版本的源代码目录,其中可能包含了各种源代码文件(如 .java 文件,用于 Java 编程)、配置文件、资源文件(如图片、CSS 和 JavaScript)以及构建脚本等。通常,一个...
在Java中,开发者可以使用`javablowfish`库来实现Blowfish算法,以便进行数据的加密和解密操作。下面将详细阐述Blowfish算法的核心概念、Java实现以及如何在实际应用中使用。 一、Blowfish算法基础 Blowfish算法是...