闲着,发现昨天网上流传甚广的光棍节程序员闯关秀,死磕硬碰到了最后一关,按网上攻略提示,总算把第十关给破了。
故小结一番,java编程如下:
//攻略提示:
//有人提示要应景光棍节,空格全替换成1。然后8位2进制,转换成一个byte,
//然后有了byte Array,转成ASCII码,就会看到一个Base64的字符串,
//把字符串存成文件,文件解压缩,就看到通关的Key了
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class DoubleEleven {
public static void main(String[] args) throws Exception{
char [] str = readFile( "D://code.txt" );
//code中存放的为第九关上的字符,已在文本编辑器里将下划线"____"替换为"1111"
//readFIle实现:将8位2进制→1个byte→ASCII码→char Array
String cc = new String(str); //char Array→Base64的字符串
System. out .print(cc );
GenerateFile(cc); //Base64的字符串string → 解码decoder后生成zip文件
//PS:一开始直接写成jpg文件老是打不开,后面改为zip,嘿嘿,解压缩后仓老师出现了~with key to level 10
}
public static char [] readFile(String fileName) {
//byte num;
char [] coutput= new char [8112];
int j=0;
String stroutput = "" ;
File file = new File(fileName);
if (file.exists()){
if (file.isFile()){
try {
BufferedReader input = new BufferedReader ( new FileReader(file));
String text;
String[] texts = new String[8];
byte temp;
while ((text = input.readLine()) != null )
{
texts = text.split( " " ); //将每行字符串分为8段(按空格分离)
for ( int i=0;i<8;i++,j++){
temp=Byte.valueOf(texts[i],2); //将每个byte转换成char
coutput[j]=( char )temp;
}
}
}
catch (IOException ioException){
System. err .println( "File Error!" );
}
}
else if (file.isDirectory()){
String[] dir = file.list();
stroutput += "Directory contents:/n" ;
for ( int i=0; i<dir. length ; i++){
stroutput += dir[i] + "/n" ;
}
}
}
else {
System. err .println( "Does not exist!" );
}
return coutput;
}
//base64字符串转化成文件(zip格式)
public static boolean GenerateFile(String imgStr)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null ) //图像数据为空
return false ;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte [] b = decoder.decodeBuffer(imgStr);
for ( int i=0;i<b. length ;++i)
{
if (b[i]<0)
{ //调整异常数据
b[i]+=256;
}
}
//生成zip压缩文件
String imgFilePath = "d://光棍2012.zip" ; //新生成的文件
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true ;
}
catch (Exception e)
{
return false ;
}
}
}
运行最终结果: http://segmentfault.com/game/?k=e4a4a96a69a1b2b530b3bec6734cdf52
过关其他策略问题:
1.谷歌浏览器必备工具,Ctrl+shirt+I 熟练操作之,抓包嘿嘿。
2.谷姐,度娘~必修之课
3.常用加密解密方法