JavaScript: SHA256, byte array, 16進制字串 轉換等

JavaScript SHA-256 demo: https://geraintluff.github.io/sha256/


https://github.com/emn178/js-sha256

到 https://cdnjs.com/ 搜尋
=> https://cdnjs.cloudflare.com/ajax/libs/js-sha256/0.9.0/sha256.min.js

A simple SHA-256 / SHA-224 hash function for JavaScript supports UTF-8 encoding.

It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` input



https://github.com/brix/crypto-js
https://code.google.com/archive/p/crypto-js/
https://blog.zhengxianjun.com/2015/05/javascript-crypto-js/

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9/crypto-js.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9/hmac-sha256.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9/enc-base64.min.js"></script>

var hash = CryptoJS.SHA256("Message").toString();

https://github.com/brix/crypto-js/issues/157

var hash = CryptoJS.HmacSHA256("Message", "key");

// Message 是按照使用者的規則拼接的字串
// key為設置密鑰




https://github.com/digitalbazaar/forge

<script src="https://cdn.jsdelivr.net/npm/node-forge@0.7.0/dist/forge.min.js"></script>
<script type="text/javascript">
"use strict";

var md = forge.md.sha256.create();
md.update('The quick brown fox jumps over the lazy dog');
console.log(md.digest().toHex());

console.log(hexToBytes(md.digest().toHex()));

console.log(bytesToHex(hexToBytes(md.digest().toHex())));

// Convert a hex string to a byte array
function hexToBytes(hex) {
    for (var bytes = [], c = 0; c < hex.length; c += 2)
    bytes.push(parseInt(hex.substr(c, 2), 16));
    return bytes;
}

// Convert a byte array to a hex string
function bytesToHex(bytes) {
    for (var hex = [], i = 0; i < bytes.length; i++) {
        var current = bytes[i] < 0 ? bytes[i] + 256 : bytes[i];
        hex.push((current >>> 4).toString(16));
        hex.push((current & 0xF).toString(16));
    }
    return hex.join("");
}

</script>




//十六进制字符串转字节数组
function StrToBytes(str) {
var pos = 0;
var len = str.length;

if(len %2 != 0) {
return null;
}
len /= 2;
var hexA = new Array();

for(var i=0; i<len; i++) {
var s = str.substr(pos, 2);
var v = parseInt(s, 16);
hexA.push(v);
pos += 2;
}
return hexA;
}

//字节数组转十六进制字符串
function BytesToStr(arr) {
var str = "";

for(var i=0; i<arr.length; i++) {
var tmp = arr[i].toString(16);

if(tmp.length == 1) {
   tmp = "0" + tmp;
}

str += tmp;
}
return str;
}



javascript 使用 toString 10進位轉2或8或16進位.

toString():預設是10進位轉其它進位,同時,配合正則,可匹配字符。

範例:

<script language="javascript">
var x = 100;
var y1 = x.toString(2);
var y2 = x.toString(8);
var y3 = x.toString(16);
var z = "2進位 = " + y1 + "<br>8進位 = " + y2 + "<br>16進位 = " + y3;
document.write(z);
</script>





程式語言編年史

程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...