浏览 4732 次
锁定老帖子 主题:搜狗的一个笔试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-09
最后运行程序,会打印出的一句话。这句话就是我们要求的答案。 注意!这句话是用GBK编码的! public class Test { public static void encode(byte[] in, byte[] out, int password) { int len = in.length; int seed = password ^ 0x6466913d; for (int i = 0 ; i < len; ++i) { byte a = (byte)( ( in[i] ^ seed ) >>> 3 ); byte b = (byte)( ( ( ((int)in[i]) << 13 ) ^ seed ) >>> (13-5) ); a &= 0x1f; b &= 0xe0; out[i] = (byte)(a | b); seed = (((seed << 7) ^ seed ^ in[i]) + 144123481); } } public static void decode(byte[] in, byte[] out, int password) { int len = in.length; int seed = password ^ 0x6466913d; for (int i = 0 ; i < len; ++i) { // fill the code here } } public static void main(String [] args) throws Exception { int password = 0xe9479a3c; byte[] buf1 = {121, -82, 126, -49, 48, -10, -41, -37, -97, 31, -128, 113, -107, 88, -124, -37, -2, -68, 94, 38, 89, -39, -66, 39, 88, -66, -2, -31, -37, 83, -124, 104, -101, -128, 3, -118, -80, -125, 25, -31, -91, 55, 104, 102, -8, -108, -69, -126, 73, -48, }; byte[] buf2 = new byte[buf1.length]; decode(buf1, buf2, password); System.out.println(new String(buf2, "GBK")); } } 完全搞不懂什么意思? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-09-09
按照加密的顺序 在
for (int i = 0 ; i < len; ++i) { // fill the code here } 中解密。 |
|
返回顶楼 | |
发表时间:2011-09-10
已经搞定了!
public static void decode(byte[] in, byte[] out, int password) { int len = in.length; int seed = password ^ 0x6466913d; for (int i = 0; i < len; ++i) { byte a = (byte) (in[i] & 0x1f); //a低五位,实际上是高五位 byte b = (byte) ((in[i] & 0xe0));//b高三位,实际上是低三位 b = (byte) (((((int) b) << ^ seed) >>> 13); b = (byte) (b&0x7); a = (byte) (((a << 3) ^ seed) & 0xf8); out[i] = (byte) (a | b); seed = (((seed << 7) ^ seed ^ out[i]) + 144123481); } } |
|
返回顶楼 | |
发表时间:2011-09-10
兄弟还没到笔试环节吧?
这是在线评测的一个题目啊! 我同学给了点思路我就做出来了 |
|
返回顶楼 | |