其他分享
首页 > 其他分享> > 简单的js_201113

简单的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