10年前混入看雪,一直感叹大神众多,一直对软件逆向兴趣浓浓,最近遇到了关于密码学问题,一筹莫展,特此求助各位大神,希望不吝赐教。
目前手头有一个后端,里面文件众多都是以 *.js 文件编写,文件众多,无法发现如何加密为密文,现贡献些明文及所对应密文,看有没有什么思路。
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-277349.htm
[求助]有明文密文,大神们帮看看是那种加密方法
267 浏览
5 回复
或者说把base64和其他加密混合?因为在文件中找到了这段代码:
encodeCustom : function (str){
var b = new Base64().encode(str);
var c = b.substring(0, b.length/2);
var d = b.substring(b.length/2);
var e = d + c.split('').reverse().join('');
return e;
decodeCustom : function (str){
var len = str.length;
var s = str.substring(0, len - len/2);
var s2 = str.substring(len - len/2);
s2 = s2.split("").reverse().join("");
return new Base64().decode(s2 + s);
其中base64的加密方法如下:
/**
* Base64 encode / decode
function Base64() {
// private property
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
this.encode = function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
output = output +
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
return output;
// public method for decoding
this.decode = function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = _keyStr.indexOf(input.charAt(i++));
enc2 = _keyStr.indexOf(input.charAt(i++));
enc3 = _keyStr.indexOf(input.charAt(i++));
enc4 = _keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
...(已截断)
encodeCustom : function (str){
var b = new Base64().encode(str);
var c = b.substring(0, b.length/2);
var d = b.substring(b.length/2);
var e = d + c.split('').reverse().join('');
return e;
decodeCustom : function (str){
var len = str.length;
var s = str.substring(0, len - len/2);
var s2 = str.substring(len - len/2);
s2 = s2.split("").reverse().join("");
return new Base64().decode(s2 + s);
其中base64的加密方法如下:
/**
* Base64 encode / decode
function Base64() {
// private property
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
this.encode = function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
output = output +
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
return output;
// public method for decoding
this.decode = function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = _keyStr.indexOf(input.charAt(i++));
enc2 = _keyStr.indexOf(input.charAt(i++));
enc3 = _keyStr.indexOf(input.charAt(i++));
enc4 = _keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
...(已截断)
base64不是加密方法,只是一种编码方法而已。 如果加密结果是16的整倍数的话,可能是用的对称加密的填充模式,ecb,cbc之类的。 现在一般对称加密用的比较多的是aes
对称加密,你看看关键字有没有AES,DES之类的
多谢多谢
2位=>32位, 一看就是MD5的, 正常是加盐的MD5, 最后字母串的密文是64位, 猜是2段32连接的,就是将30位字符原串分成两段来加密的,