2026-01-12
#js 
公開鍵などのバイナリデータを16進法で表すと長すぎ、Base64だと変な記号が入ってコピペしづらい。そこで、数値とアルファベット大文字小文字の62種類を使ったUX重視、コピペフレンドリーなバイナリエンコーディング、Base62UXを提案します。


「code4fukui/Base62UX」

パブリックドメインまたはCC0のオープンソースです。

セパレータとしてアンダースコア「_」を任意の場所に入れてOKの仕様としていて、デフォルトで4文字の後に「_」を入れ、約1500万通りある先頭4文字で簡易識別できるようにしています。

ESMモジュールなので、ブラウザ上やDenoで下記のようにお使いいただけます。

import { Base62UX } from "https://code4fukui.github.io/Base62UX/Base62UX.js"; const rnd = crypto.getRandomValues(new Uint8Array(32)); const s = Base62UX.encode(rnd); console.log(s); // ex) yVd1_g1ljLmxku5s6UjERdMGX7BVHJYT6UE1BWNPyrZT const bin = Base62UX.decode(s); console.log(bin);

16進法(Base16)、Base64URLとの比較です。

import { Base62UX } from "https://code4fukui.github.io/Base62UX/Base62UX.js"; import { Base64URL } from "https://code4fukui.github.io/Base64URL/Base64URL.js"; import { Base16 } from "https://code4fukui.github.io/Base16/Base16.js"; const rnd = crypto.getRandomValues(new Uint8Array(32)); console.log(Base16.encode(rnd)); // 1 console.log(Base64URL.encode(rnd)); // 2 console.log(Base62UX.encode(rnd)); // 3

適度に短くて、ダブルクリックで全選択できることをご確認ください!
1. b8197e9908d5626eba370e256cbddd911321daa7db73da21dcd1ddd6d577adaf (Base16)
2. uBl-mQjVYm66Nw4lbL3dkRMh2qfbc9oh3NHd1tV3ra8 (Base64URL)
3. heeR_UzJ3ctmAHScd15TBTTQeL3jn9BEWNxt6mSNsypb (Base62UX)

links
- Base41QR、QRコードに効率よくデータを埋め込もう
- イ文字で作るBase1024Y、一日一創する2週間、第二期jigインターン2023スタート!
- Base64より効率良いBase122の有効性チェックとbin2js改良によるWASMインポート
- 環境にやさしい開発をしよう!JSONへのバイナリ埋め込み量をBase64より14%削減するBase128
- 50音を使ったバイナリ表現、Base50
- 点字を使ったエンジニアフレンドリーなエンコーディング braille-encode、Base256B.js
- クリエイティビティを刺激しよう、IdeaSyncオープン、jigインターン成果発表会、サイフラ (Base16384)

2026-01-11
#js 
バイナリデータのフォーマットを新たに作る際、数に何ビット使うか悩みますよね。

そこで、可変長バイナリフォーマット、Varuint!(参考、Variable-length quantityLEB128


「Varuint」

可変(variable)、符号なし(unsigned)、整数(int)なので、var u int。下記のように使います。

import { Varuint } from "https://code4fukui.github.io/Varuint/Varuint.js"; const bin = Varuint.encode(300); console.log(bin); // Uint8Array(2) [172, 2] const n = Varuint.decode(bin); console.log(n); // 300 const len = Varuint.length(n); console.log(len); // 2

0-127であれば1byte、128-16,383であれば2byte、16,384-2,097,151であれば3byteで表現できます。

BigIntに対応しています。

const len = Varuint.length(100000000000000000000n); console.log(len); // 10

1垓(=10の20乗)は、10byteで表せる!

2026-01-10
電子署名に欠かせないハッシュ関数。主力のアルゴリズム「SHA256」に加え、新しい「BLAKE3」に対応した、文字列をハッシュ化するツール「txt2hash」を作りました。


「txt2hash」
src on GitHub
文字を入れるたびに32byte、64文字の16進法のハッシュ値が目まぐるしく変わることが確認できます。ミニマムなデザインは、Tailwind CSS風をAI生成した、コンパクトなスタイルシート、twstyle.css


「code4fukui/BLAKE3: Pure javascript implementation of BLAKE3」

BLAKE3をいつでも使えるようにESモジュール化!

links
- 乱数作成ツールとハッシュで検証するHubSignature for GitHub Webhooks
- CSVファイルの特定項目をSHA256でハッシュ化するツール「csvhash」とSHA256.jsのDenoレジストリ登録
- 電子政府における調達のために参照すべき暗号のリストとハッシュ関数のES実装、SHA3.js / SHAKE128.js / SHAKE256.js
- ファイルのハッシュ値を表示するwebアプリ file2hash
- 128bitのハッシュ関数、懐かしのハッシュ関数MD5とSHA-3のSHAKE128
- WGSLで実装されたSHA256とDenoでの問題回避方法

クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS