无聊地分析下某网站的注册验证码
2013-02-07 14:39
295 查看
额,那个网站是pipi书屋,看别人介绍网站书挺多的,于是就进去看了一下,注册时看到了很有趣的验证码,都是给C语言程序让写出结果的,不由得让我想起以前微博上流行的复旦大学的微积分验证码。。。想法很新颖嘛,不愧是专门搞计算机类图书的网站。
看了那注册程序发现挺有趣的,于是列出来看,说不定能学到很多东西。。。
1
<<这个操作符挺少见的,和>>一样都是移位操作符,就是二进制移位,关于移位我转了个文章,点击此处。
题目不难,1的二进制就是00000001,然后左移2位就是00000100,也就是十进制的8了。(让我想起字符表情←_←和→_→)
话说<<和>>在C++是输出输入符呢。。。
2
这题考的格式控制符,%s %c %d 分别是字符串,字符和有符号十进制数,41是ASCII码,转换后的字符是),所以最后输出的值是 pipi:)81 ,顺便转载了个关于转义符和格式控制符的文章,点击此处。
(貌似那个81是随机产生的。。。)
3
嗯,这是关于printf返回值的题目,printf返回的是输出的字符数,转义字符算一个字符。这样就题目很容易理解了,答案是4321。
4
作为验证码,这题还真难一眼看出来。。。
好吧是我太弱看不出来,^=这个符号好少见,我查了半天,为什么书里面都没有讲到异或运算符^。。。
a^b,以二进制一位一位对着看,如果相同就取0,如果不同就取a的反(大概是这样),然后再换成十进制,而且
a=a^b;b=b^a;a=a^b;
这句能交换两值,不使用临时变量,灰常神奇。
总之这题就是简单的排序而已,从小到大排序再输出对应的字符:35BGUVbdtx。
5
好吧,递归用在main函数上可以吗,反正我的VC是出错了。。。
题目意思很容易懂,就是输出那些十六进制对应的字符。把n改成int *n调试成功,答案为:Hello, world!
6
这个很容易理解,但这有些问题。
先计算1 && x,当x为1时返回值为1,然后输出1,如果x为其他数返回值也为1,最后输出为0。
而x为多少得看编译器把未初始化的x定义为多少,不同编译器不同结果。
但正常编译器都不会定义为1的,所以答案为0。
7
python语言我也没学过啊,上传到http://codepad.org/上跑了一下就出来了,据百度知道上说是求2的69次方。。。
答案为:590295810358705651712
8
javascript。。。还是没学过,有空得学学。。。
度娘说
1. 首先计算2<1,结果为false,
2. 然后计算 false<3;
3. js自动转换数据类型以做比较,false就是0
4. 0<3的结果自然是true
答案为true
嗯,题目就差不多了,如果以后再刷新出新题目再拿来分享吧。。。
这次也学到了挺多(^_^)(这不是异或号哦)。。。
看了那注册程序发现挺有趣的,于是列出来看,说不定能学到很多东西。。。
1
#include <stdio.h> int main() { int a = 1; printf("%d", a << 2 + a); return 0; }
<<这个操作符挺少见的,和>>一样都是移位操作符,就是二进制移位,关于移位我转了个文章,点击此处。
题目不难,1的二进制就是00000001,然后左移2位就是00000100,也就是十进制的8了。(让我想起字符表情←_←和→_→)
话说<<和>>在C++是输出输入符呢。。。
2
#include <stdio.h> main() { printf("%s:%c%d", "pipi", 41, 81); }
这题考的格式控制符,%s %c %d 分别是字符串,字符和有符号十进制数,41是ASCII码,转换后的字符是),所以最后输出的值是 pipi:)81 ,顺便转载了个关于转义符和格式控制符的文章,点击此处。
(貌似那个81是随机产生的。。。)
3
#include <stdio.h> int main() { int i=43; printf("%d\n",printf("%d",printf("%d",i))); return 0; }
嗯,这是关于printf返回值的题目,printf返回的是输出的字符数,转义字符算一个字符。这样就题目很容易理解了,答案是4321。
4
#include <stdio.h> #define ARRAY_SIZE 10 int main() { int arr[ARRAY_SIZE] = {51,116,53,120,85,66,71,98,86,100}; int i, j; for(i = 0; i < ARRAY_SIZE; i++) for(j = 0; j < ARRAY_SIZE-1; j++) if(arr[j] > arr[j+1]) { arr[j] ^= arr[j+1]; arr[j+1] ^= arr[j]; arr[j] ^= arr[j+1]; } for(i = 0; i < ARRAY_SIZE; i++) printf("%c", arr[i],arr[i]); }
作为验证码,这题还真难一眼看出来。。。
好吧是我太弱看不出来,^=这个符号好少见,我查了半天,为什么书里面都没有讲到异或运算符^。。。
a^b,以二进制一位一位对着看,如果相同就取0,如果不同就取a的反(大概是这样),然后再换成十进制,而且
a=a^b;b=b^a;a=a^b;
这句能交换两值,不使用临时变量,灰常神奇。
总之这题就是简单的排序而已,从小到大排序再输出对应的字符:35BGUVbdtx。
5
#include <stdio.h> int n[]={0x48, 0x65,0x6C,0x6C, 0x6F,0x2C,0x20, 0x77,0x6F,0x72, 0x6C,0x64,0x21, 0x0A,0x00},*m=n; main(n){ if(putchar (*m)!='\0') main(m++); }
好吧,递归用在main函数上可以吗,反正我的VC是出错了。。。
题目意思很容易懂,就是输出那些十六进制对应的字符。把n改成int *n调试成功,答案为:Hello, world!
6
#include <stdio.h> int main() { int x; printf("%d",x == (1 && x)); }
这个很容易理解,但这有些问题。
先计算1 && x,当x为1时返回值为1,然后输出1,如果x为其他数返回值也为1,最后输出为0。
而x为多少得看编译器把未初始化的x定义为多少,不同编译器不同结果。
但正常编译器都不会定义为1的,所以答案为0。
7
#!/usr/bin/env python import math print int(math.pow(2, 69))
python语言我也没学过啊,上传到http://codepad.org/上跑了一下就出来了,据百度知道上说是求2的69次方。。。
答案为:590295810358705651712
8
// javascript function show(a){ alert(2 < a < 3); } show(1);
javascript。。。还是没学过,有空得学学。。。
度娘说
1. 首先计算2<1,结果为false,
2. 然后计算 false<3;
3. js自动转换数据类型以做比较,false就是0
4. 0<3的结果自然是true
答案为true
嗯,题目就差不多了,如果以后再刷新出新题目再拿来分享吧。。。
这次也学到了挺多(^_^)(这不是异或号哦)。。。
相关文章推荐
- 无聊地分析下某网站的注册验证码
- struts2+hibernate 实现B2C电子商务网站的登录 、注册中验证码的实现(源码)
- 网站性能——注册登录验证码
- struts2+hibernate 实现B2C电子商务网站的登录 、注册中验证码的实现(源码)
- 验证码是编程题!!程序员必须注册的网站
- 网站注册图形验证码
- 网站、手机验证码开发(手机注册验证)
- 暴力破解网站用户注册验证码的SHELL脚本示范
- vs2010asp.net网站制作用户注册登录界面源代码(包含验证码)并把用户信息保存到数据库sql2008
- 网站投票防刷票验证码分析和实践
- Spark Streaming实战对论坛网站动态行为pv,uv,注册人数,跳出率的多维度分析
- SNS、微博网站“注册流程”对比分析?
- --网站注册验证码原理,完整实例(数字,字母,中文,混合),附原码--
- 网站注册图形验证码
- 国外网站注册,需要输入手机号接收验证码,手机格式怎么写?
- Python实现网站注册验证码生成类
- 网站注册流程的分析与研究
- 用户在网站注册,网站通过微信发送验证码,这个操作是怎么实现的?
- 网站注册有关手机发送验证码并具有时效性的问题
- struts2+hibernate 实现B2C电子商务网站的登录 、注册中验证码的实现(源码)