某应用软件对用户密码的加密算法很简单,描述如下:假设用户名为abc,密码为123456.其加密过程如下:第一步:先用用户名轮循的方式使之与密码等长,如上例中密码为6位,则补齐后的用户位为abcabc
第二步:将abcabc和123456各自转换为ASCII码(以十六进制表示)相加(将两字符串对应位置的字母asc码相加,各位置互相不影响).
以上面为例.
abcabc各位的ASCII码为:61 62 63 61 62 63
123456各位的ASCII码为:31 32 33 34 35 36
则二者相加的结果为: 92 94 96 95 97 99
所得到的密码字符串即为929496959799
同理,若密码为mjyHujik,则补齐的用户位为abcabcab
得到的密码为:
61 62 63 61 62 63 61 62
+6D 6A 79 48 75 6A 69 6B
________________________________
=CE CC DC A9 D7 CD CA CD所得到的密码字符串为CECCDCA9D7CDCACD现在已经知道用户名和加密后的密码,需要求初始密码,请给出反求初始密码的算法,要求使用java语言实现
第二步:将abcabc和123456各自转换为ASCII码(以十六进制表示)相加(将两字符串对应位置的字母asc码相加,各位置互相不影响).
以上面为例.
abcabc各位的ASCII码为:61 62 63 61 62 63
123456各位的ASCII码为:31 32 33 34 35 36
则二者相加的结果为: 92 94 96 95 97 99
所得到的密码字符串即为929496959799
同理,若密码为mjyHujik,则补齐的用户位为abcabcab
得到的密码为:
61 62 63 61 62 63 61 62
+6D 6A 79 48 75 6A 69 6B
________________________________
=CE CC DC A9 D7 CD CA CD所得到的密码字符串为CECCDCA9D7CDCACD现在已经知道用户名和加密后的密码,需要求初始密码,请给出反求初始密码的算法,要求使用java语言实现
解决方案 »
- java的commons-net包使用FTP连续上传文件报错--can not create file
- 大家帮我看看我对这个异常的理解对不?
- 一个转换String为Date的东东,我错在哪了啊?请大家赐教,在线等。。。。。
- 我的Applet程序为什么不能在Appletviewer下运行呢?
- 不明白连接池代码,请指教
- Array
- 求SWT开发界面的例子程序
- 【请教】MySQL 4.0 不能正确显示中文,只显示“???”,救我!!
- 请问Java里有没有WMI(Windows Management Instrumentation)的包?
- 如何将很长的代码分为两行?连接转移符是什么?
- 请教java密钥变换的问题
- 乱码问题!
public static String byteHEX(byte ib) {
char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'};
char[] ob = new char[2];
ob[0] = Digit[(ib >>> 4) & 0X0F];
ob[1] = Digit[ib & 0X0F];
String s = new String(ob);
return s;
} public static int hextoalgorism(String hex) {
if (hex == null || hex.length() != 2) {
return 0;
}
char[] h = new char[2];
h = hex.toCharArray();
int alg = 0; alg = Char16ToInt(h[0]) * 16;
alg += Char16ToInt(h[1]);
return alg;
} public static int Char16ToInt(char c) {
int rt = 0;
switch (c) {
case '0':
rt = 0;
break;
case '1':
rt = 1;
break;
case '2':
rt = 2;
break;
case '3':
rt = 3;
break;
case '4':
rt = 4;
break;
case '5':
rt = 5;
break;
case '6':
rt = 6;
break;
case '7':
rt = 7;
break;
case '8':
rt = 8;
break;
case '9':
rt = 9;
break;
case 'A':
rt = 10;
break;
case 'B':
rt = 11;
break;
case 'C':
rt = 12;
break;
case 'D':
rt = 13;
break;
case 'E':
rt = 14;
break;
case 'F':
rt = 15;
break;
}
return rt;
} public static void main(String[] args) throws IOException { String username = "abcabcab";
byte[] p = new byte[username.length()];
p = username.getBytes();
String[] hexstr = new String[username.length()];
String newpw = "CECCDCA9D7CDCACD";
String[] pw = new String[newpw.length() / 2];
int[] oldpw = new int[newpw.length() / 2];
char pp;
for (int i = 0; i < p.length; i++) {
hexstr[i] = byteHEX(p[i]);
System.out.print(hexstr[i]);
}
System.out.println();
for (int n = 0; n < newpw.length() / 2; n++) {
pw[n] = newpw.substring(n * 2, n * 2 + 2);
System.out.print(pw[n]);
} System.out.println();
System.out.println("------");
for (int x = 0; x < oldpw.length; x++) {
oldpw[x] = hextoalgorism(pw[x]) - hextoalgorism(hexstr[x]);
pp = (char) oldpw[x];
System.out.print(pp);
} }
}
ob[1] = Digit[ib & 0X0F];
能不能解释一下!
比较抽象。