Заметки

Заметки JavaScript

Генерация криптографически стойкого случайного числа:

function createClientNonce(len) {
    var arr = new Uint8Array((len || 40) / 2);
    window.crypto.getRandomValues(arr);
    return Array.from(arr, dec2hex).join('')
}
function dec2hex(dec) {
    return ('0' + dec.toString(16)).substr(-2)
}

Как сконвертировать HEX строку в BIN на js:

function hex2bin (s) {
    //  discuss at: http://locutus.io/php/hex2bin/
    // original by: Dumitru Uzun (http://duzun.me)
    //   example 1: hex2bin('44696d61')
    //   returns 1: 'Dima'
    //   example 2: hex2bin('00')
    //   returns 2: '\x00'
    //   example 3: hex2bin('2f1q')
    //   returns 3: false

    var ret = []
    var i = 0
    var l

    s += ''

    for (l = s.length; i < l; i += 2) {
        var c = parseInt(s.substr(i, 1), 16)
        var k = parseInt(s.substr(i + 1, 1), 16)
        if (isNaN(c) || isNaN(k)) return false
        ret.push((c << 4) | k)
    }

    return String.fromCharCode.apply(String, ret)
}

Пример switch case на js:

function formatAlgo(algo) {
    formattedAlgo = '';
    switch (algo) {
        case 'SHA1':
            formattedAlgo = 'SHA-1';
            break;
        case 'SHA256':
            favoriteAlgo = 'SHA-256';
            break;
        case 'SHA512':
            favoriteAlgo = 'SHA-512';
            break;
        default:
            throw ('Bad hash algo choosen:' + algo);
    }
    return formattedAlgo;
}

JavaScript XOR for STRING

function strXor(a, b) {
    let len = Math.min(a.length, b.length);
    let arr = new Array(len);
    for (var i = 0; i < len; ++i)
        arr[i] = a.charCodeAt(i) ^ b.charCodeAt(i);
    return String.fromCharCode.apply(null, arr);
}

JavaScript XOR for HEX

function hexXor(a, b) {
    var res = "",
        l = Math.max(a.length, b.length);
    for (var i=0; i<l; i+=4)
        res = ("000"+(parseInt(a.slice(-i-4, -i||a.length), 16) ^ parseInt(b.slice(-i-4, -i||b.length), 16)).toString(16)).slice(-4) + res;
    return res;
}

Аналог PBKDF2 на js:

function hi(algo, data, key, i) {
    let int1 = "\0\0\0\1";
    let salt_int = key + bin2hex(int1);
    let ui = hash_hmac(algo, salt_int, data, 'HEX', 'TEXT', 'HEX');
    // console.log('hi data: ' + data);
    // console.log('hi key: ' + key);
    // console.log('hi salt_int: ' + salt_int);
    //console.log('u1: ' + ui);

    let result = ui;
    for (let k = 1; k < i; k++) {
        ui = hash_hmac(algo, ui, data, 'HEX', 'TEXT', 'HEX');
        result = hexXor(result , ui);

        // console.log('u'+k+': '+ui);
        // console.log('result'+k+': '+result);
        // if (k > 5) break;
    }
    return result;
}
/**
 * inputType - can be one of HEX, TEXT, B64, BYTES, or ARRAYBUFFER
 * outputType - B64, HEX, BYTES, or ARRAYBUFFER
 */
function hash_hmac(algo, data, key, inputDataType, inputKeyType, outputType) {
    // console.log('algo: '+algo);
    // console.log('inputType: '+inputType);
    let shaObj = new jsSHA(algo, inputDataType);
    shaObj.setHMACKey(key, inputKeyType);
    shaObj.update(data);
    return shaObj.getHMAC(outputType);
}

function hash(algo, data, inputType, outputType) {
    let shaObj = new jsSHA(algo, inputType);
    shaObj.update(data);
    return shaObj.getHash(outputType);
}

Как отменить сортировку по умолчанию в DataTables

$(document).ready( 
  $('#example').dataTable( {
    order: []
  });
)

2018.09.21 Jquery live поиск

/**
 * JQ Live search for PP and PK lists
 *
 * https://codepen.io/html5andblog/pen/RPewBx
 */

$('.live-search-list li').each(function(){
    $(this).attr('data-search-term', $(this).text().toLowerCase());
});

var searchTerm = '';//для сохранения текста поля искомого слова
$('#searchinput').on('keyup', function(){
    searchTerm = $(this).val().toLowerCase();
    $('.live-search-list li').each(function(){
        if ($(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0 || searchTerm.length < 1) {
            $(this).show();
        } else {
            $(this).hide();
        }
    });
});

$('#searchclear').on('click', function(){//При нажатии кнопки "очистить поле ввода" 
    searchTerm = $('#searchinput').val().toLowerCase();
    $('.live-search-list li').each(function(){
        if ($(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0 || searchTerm.length < 1) {
            $(this).show();
        } else {
            $(this).hide();
        }
    });
});

2018.09.11 Jquery заполнить или очистить поле у всей колонки

$('.adm-list-table-cell-last').children("[type='text']").val(1);
Афоризм дня:
Кто не знает цену времени, тот не рожден для славы. (619)

Leave a reply