简单的js_201113
作者:互联网
题目:简单的js
出自:第九届山东省大学生网络安全技能大赛
本题要点:js基础语法阅读,python简单脚本编写(有手撕的耐心也行
/** * Pseudo md5 hash function * @param {string} string * @param {string} method The function method, can be 'ENCRYPT' or 'DECRYPT' * @return {string} */ function pseudoHash(string, method) { // Default method is encryption if (!('ENCRYPT' == method || 'DECRYPT' == method)) { method = 'ENCRYPT'; } // Run algorithm with the right method if ('ENCRYPT' == method) { // Variable for output string var output = ''; // Algorithm to encrypt for (var x = 0, y = string.length, charCode, hexCode; x < y; ++x) { charCode = string.charCodeAt(x); if (128 > charCode) { charCode += 128; } else if (127 < charCode) { charCode -= 128; } charCode = 255 - charCode; hexCode = charCode.toString(16); if (2 > hexCode.length) { hexCode = '0' + hexCode; } output += hexCode; } // Return output return output; } else if ('DECRYPT' == method) { // DECODE MISS // Return ASCII value of character return string; } } document.getElementById('password').value = pseudoHash('19131e18041b1d4c47191d19194f1949481a481a1d4c1c461b4d484b191b4e474f1e4b1d4c02', 'DECRYPT');
一段js加密解密算法,解密部分缺失。
19131e18041b1d4c47191d19194f1949481a481a1d4c1c461b4d484b191b4e474f1e4b1d4c02
这段数据不长,比赛是手撕的。
python脚本:
a="19131e18041b1d4c47191d19194f1949481a481a1d4c1c461b4d484b191b4e474f1e4b1d4c02" num="" for i in range(len(a)/2): s1=int(a[2*i:2*i+2],16) s2=255-s1 if(s2<128): s3=s2+128 if(s2>127): s3=s2-128 num+=chr(s3) print num
另外记一点很很很基础常用python语法:
1.字符串切片相关知识:https://www.cnblogs.com/ilyou2049/p/11095911.html
2.len(),chr(),type(),int():
len():返回对象(字符、列表、元组等)长度或项目个数。
chr():用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
type():返回对象类型
int():用于将一个字符串或数字转换为整型。
转自:https://www.runoob.com/python/python-func-int.html
int(x,base) x 有两种:str / int 1、若 x 为纯数字,则不能有 base 参数,否则报错;其作用为对入参 x 取整 >>> int(3.1415926) 3 >>> int(-11.123) -11 >>> int(2.5,10) #报错 >>> int(2.5) 2 2、若 x 为 str,则 base 可略可有。 base 存在时,视 x 为 base 类型数字,并将其转换为 10 进制数字。 若 x 不符合 base 规则,则报错。如: >>>int("9",2) #报错,因为2进制无9 >>> int("9") 9 #默认10进制 >>> int("3.14",8) >>> int("1.2") #均报错,str须为整数 >>>int("1001",2) 9 # "1001"才是2进制格式,并转化为十进制数字9 >>> int("0xa",16) 10 # ≥16进制才会允许入参为a,b,c... >>> int("b",8) #报错 >>> int("123",8) 83 #视123为8进制数字,对应的10进制为83
另外:python print时默认将16进制数字转为10进制输出,若要输出16进制数字需设置print的格式
标签:string,int,js,报错,简单,charCode,method,201113,进制 来源: https://www.cnblogs.com/779ano/p/13971324.html