• XSS.stack #1 – первый литературный журнал от юзеров форума

Blockchain decrypt wallet with Password

EmeliRouse

RAID-массив
Пользователь
Регистрация
28.06.2020
Сообщения
59
Реакции
138
У вас должно быть более 5 сообщений для просмотра скрытого контента.

Для использования требуется NodeJS с установленным пакетом Crypto.
Расшифровывает кошелек при помощи пароля от кошелька.
Зашифрованный кошелек можно получить при помощи ID от BlockChain.
008e3128b4.png


Кому надо - большого труда разобраться не будет думаю., ибо самое сложное уже реализовано за вас.
JavaScript:
let payload;
let password;
let pbkdf2_iterations = 5000;
let SALT_BYTES = 16;
let KEY_BIT_LEN = 256;
let BLOCK_BIT_LEN = 128;
let ALGO = {
    SHA1: "sha1",
    SHA256: "sha256"
};
const crypto = require('crypto');
let Iso10126 = {
    pad: function pad(dataBytes, nBytesPerBlock) {
        var nPaddingBytes = nBytesPerBlock - dataBytes.length % nBytesPerBlock;
        var paddingBytes = crypto.randomBytes(nPaddingBytes - 1);
        var endByte = new Buffer([nPaddingBytes]);
        return Buffer.concat([dataBytes, paddingBytes, endByte])
    },
    unpad: function unpad(dataBytes) {
        var nPaddingBytes = dataBytes[dataBytes.length - 1];
        return dataBytes.slice(0, -nPaddingBytes)
    }
};
let AES = {
    CBC: "aes-256-cbc",
    OFB: "aes-256-ofb",
    ECB: "aes-256-ecb",
    encrypt: function encrypt(dataBytes, key, salt, options) {
        options = options || {};
        var cipher = crypto.createCipheriv(options.mode || AES.CBC, key, salt || "");
        cipher.setAutoPadding(!options.padding);
        if (options.padding) dataBytes = options.padding.pad(dataBytes, BLOCK_BIT_LEN / 8);
        var encryptedBytes = Buffer.concat([cipher.update(dataBytes), cipher.final()]);
        return encryptedBytes
    },
    decrypt: function decrypt(dataBytes, key, salt, options) {
        options = options || {};
        var decipher = crypto.createDecipheriv(options.mode || AES.CBC, key, salt || "");
        decipher.setAutoPadding(!options.padding);
        var decryptedBytes = Buffer.concat([decipher.update(dataBytes), decipher.final()]);
        if (options.padding) decryptedBytes = options.padding.unpad(decryptedBytes);
        return decryptedBytes
    }
};
function decryptBufferWithKey(payload, iv, key, options) {
    options = options || {};
    options.padding = options.padding || Iso10126;
    var decryptedBytes = AES.decrypt(payload, key, iv, options);
    return decryptedBytes.toString("utf8")
}
function pbkdf2(password, salt, iterations, keyLenBytes, algorithm) {
    algorithm = algorithm || ALGO.SHA1;
    return crypto.pbkdf2Sync(password, salt, iterations, keyLenBytes, algorithm);
}
function stretchPassword(password, salt, iterations, keyLenBits) {
    var saltBuffer = new Buffer(salt, "hex");
    var keyLenBytes = (keyLenBits || 256) / 8;
    return pbkdf2(password, saltBuffer, iterations, keyLenBytes, ALGO.SHA1)
}
function decryptDataWithPassword(data, password, iterations, options) {
    var dataHex = new Buffer(data, "base64");
    var iv = dataHex.slice(0, SALT_BYTES);
    var payload = dataHex.slice(SALT_BYTES);
    var salt = iv;
    var key = stretchPassword(password, salt, iterations, KEY_BIT_LEN);
    var res = decryptBufferWithKey(payload, iv, key, options);
    return res
}

var decrypted = decryptDataWithPassword(payload, password, pbkdf2_iterations);
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх