关于搜狗在线测评上面的题目详解
前几天在投递了搜狗Java开发工程师。需要搞一个在线测评,出了一道题目,是程序填空题
要求观察程序,补全decode,输出一句话:
public class Test { public static void encode(byte[] in, byte[] out, int password) { int len = in.length; int seed = password ^ 0x1963f9c; for (int i = 0 ; i < len; ++i) { byte a = (byte)( ( in[i] ^ seed ) >>> 2 ); byte b = (byte)( ( ( ((int)in[i]) << 13 ) ^ seed ) >>> (13-6) ); a &= 0x3f; b &= 0xc0; out[i] = (byte)(a | b); seed = (((seed << 7) ^ seed ^ in[i]) + 5393887); } } public static void decode(byte[] in, byte[] out, int password) { int len = in.length; int seed = password ^ 0x1963f9c; for (int i = 0 ; i < len; ++i) { byte a = (byte)(in[i] & 0x3f); byte b = (byte)(in[i] & 0xc0);a = (byte)(((a << 2) ^ seed) & 0xfc);b = (byte)((((((int)b) << (13-6)) ^ seed) >>13) & 0x03); out[i] = (byte)(a | b); seed = (((seed << 7) ^ seed ^ out[i]) + 5393887); } } public static void main(String [] args) throws Exception { int password = 0x99b90094; byte[] buf1 = {113, 87, 1, -29, 55, -5, 65, 13, -85, 78, 50, 23, -33, -29, 73, 117, -97, 106, 77, -17, -107, -62, -110, -126, -15, 32, -48, -128, }; byte[] buf2 = new byte[buf1.length]; decode(buf1, buf2, password); System.out.println(new String(buf2, "GBK")); } }
思前想后,发现规律。这就是一系列的移位,我们要做的就是反过来再移一次。先看看encode方法,然后再去实现decode。方法如下:
public static void decode(byte[] in, byte[] out, int password) { int len = in.length; int seed = password ^ 0x1963f9c; for (int i = 0 ; i < len; ++i) { byte a = (byte)(in[i] & 0x3f); byte b = (byte)(in[i] & 0xc0);a = (byte)(((a << 2) ^ seed) & 0xfc);b = (byte)((((((int)b) << (13-6)) ^ seed) >>13) & 0x03); out[i] = (byte)(a | b); seed = (((seed << 7) ^ seed ^ out[i]) + 5393887); } }
最后输出的结果是:听歌从搜狗音乐搜索开始!!!
关于搜狗在线测评上面的题目详解相关推荐
- u-boot-2009.08在2440上的移植详解(三)
一.移植环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...
- 计算机组成原理课设题目详解
计算机组成原理课设题目详解 一.实验一 1.实验名称: 验证74LS181运算和逻辑功能 2.实验目的: (1) 掌握算术逻辑单元(ALU)的工作原理: (2) 熟悉简单运算器的数据传送通路: (3) ...
- 如何快速掌握MYSQL?附牛客网精选的50道SQL题目详解【入门推荐】
大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 另外也欢迎大家 ...
- 申通快递:核心业务系统云原生化上云技术详解
简介:如果说,快递行业上半场的竞争拼的是规模.服务乃至价格,进入下半场,快递企业们还需要比拼硬核的技术实力.--周金龙(遥方) 随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移 ...
- #阿里云原生最佳实践# 申通快递:核心业务系统云原生化上云技术详解
随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移,从而享受云计算带来的技术红利.IDC发布的<全球云计算IT基础设施市场预测报告>显示:2019年全球云上的IT基础 ...
- 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)...
不多说,直接上干货! 参考博客 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解) 第一步:首先,提示升级下pip 第二步 ...
- 【Linux开发】全面的framebuffer详解
全面的framebuffer详解 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象D ...
- 《oracle大型数据库系统在AIX/unix上的实战详解》讨论31: oracle、sybase 数据库的不同访问...
<Oracle大型数据库系统在AIX/UNIX上的实战详解> 讨论31: oracle.sybase 数据库的不同访问方式 文平. 用户来信要求更细节比较一下Oracle和sybas ...
- Linux操作系统上lsof命令详解
Linux操作系统上lsof命令详解 2011-10-08 18:31:31 http://xjsunjie.blog.51cto.com/999372/682865 标签:Linux lsof命令 ...
最新文章
- 2020 年,AI 芯片内存哪家强?
- Ubuntu上安装oracle java 7
- 【转摘】Office三剑客之间的格式互换
- Spring Batch可重启性
- 【自适应盲均衡9】基于判决反馈的多径衰落信道的盲均衡与MATLAB仿真(CMA-DFE)
- 串灯控制盒去掉怎么接_暖通小兵设计系列16-集线盒(中央控制器)简介(余小其转载版本)...
- Mac支持NTFS两款软件
- SAP GR/IR在系统AP中收货和校验对会计业务的影响(详细)
- FW软件的安装及简单的使用;
- ios 苹果支付(IAP)
- 如何设置微信群名称?
- 中英文标点符号转换-在线工具
- 单电机板机模型,f22
- Python字串(string)基础与20种常见操作
- JS基础—移动端网页特效
- win8“400 bad request”能登QQ,无法上网解决办法d
- kali官方ios下载今天刚刚下载的
- 前端生成二维码与图片合成
- 优秀架构师必须拥有的架构思维习惯
- 现在的年轻人真的浮躁吗?