Notes
Заметки 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)
By den
On May 21, 2019