feat: add components
This commit is contained in:
33
components/component-shannonentropy-ex.js
Normal file
33
components/component-shannonentropy-ex.js
Normal file
@@ -0,0 +1,33 @@
|
||||
// http://blog.dkbza.org/2007/05/scanning-data-for-entropy-anomalies.html
|
||||
// https://github.com/dxa4481/truffleHog/blob/master/truffleHog.py
|
||||
|
||||
var Math_log2 = Math.log2 || (x) => {
|
||||
return Math.log(x) * Math.LOG2E;
|
||||
};
|
||||
|
||||
exports.SHANNON_ENTROPY_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
exports.SHANNON_ENTROPY_HEX = "1234567890abcdefABCDEF";
|
||||
|
||||
exports.shannonEntropy = (data, charRange) => {
|
||||
if (!data) {
|
||||
return 0;
|
||||
}
|
||||
var lenOfData = data.length;
|
||||
var charCodeCountMap = {};
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var charCode = data.charCodeAt(i);
|
||||
charCodeCountMap[charCode] = charCodeCountMap[charCode] || 0;
|
||||
charCodeCountMap[charCode] += 1;
|
||||
}
|
||||
var entropy = 0;
|
||||
for (var i = 0; i < charRange.length; i++) {
|
||||
var charCode = charRange.charCodeAt(i);
|
||||
var charCodeCount = charCodeCountMap[charCode];
|
||||
if (charCodeCount != null) {
|
||||
var pCharCode = charCodeCount / lenOfData;
|
||||
entropy += - pCharCode * Math_log2(pCharCode);
|
||||
}
|
||||
}
|
||||
return entropy;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user