
はてなキーワード:ハッシュ値とは
個人を特定するのに全ゲノムを比較する必要がないという意見には同意しますよ。
上のカキコで「DNA」と書かれていたものを、私が「全ゲノム」と解釈してトラバしているので微妙に議論が噛み合わない感じになっていますが、私もハッシュ化したシーケンス(スケッチ)を個人照合に使うのがいいと思っているわけではないということは申し上げておきます。
そのうえで、採用するリードのクオリティを厳し目に設定するのと、十分なシーケンス深度で読むのと、完全一致以外も許容するようにすればシーケンスエラーの問題は克服できるはずです。
むしろ細菌ゲノムなどのコンタミネーションや、ミトコンドリアの数が組織間で異なることがより大きな問題となります。
いつも理想的な条件でサンプリングできればよいですが、十分なサンプル量が得られなかった場合などにはコンタミネーションの影響が大きくなり精度が低下するおそれがあります。
上の議論では犯罪捜査への応用が話題に上っていますが、例えば犯罪現場に残された毛髪や体液はサンプルのクオリティが不十分であると思います。
それから、ハッシュ化するというアイデアはセキュリティ上よさそうに見えますが、塩基配列は扱う文字が4種類しかないので、情報工学でやるパスワードのハッシュ化よりも脆弱です。
攻撃者が予め既知のヒトゲノムで生み出しうるk-merの配列を全て列挙して、それぞれのハッシュ値を取得しておけば(多分)ゲノムを復号できます。
Hashcatは強力なパスワード解析ツールで、主にハッシュ値の復元やパスワードリカバリーに利用されます。コマンドラインで操作し、多様なハッシュタイプに対応。代表的な使い方は以下のようなコマンド構文です:
hashcat [オプション] [ハッシュファイル] [辞書ファイルまたはマスク]
hashcat -m 0 -a 0 hashes.txt wordlist.txt
また、ブルートフォースではマスク指定が可能で、?l(小文字)、?u(大文字)、?d(数字)、?s(記号)などの文字列パターンを用います。
Hashcatは辞書攻撃、ブルートフォース攻撃、コンビネーション攻撃、マスク攻撃など多彩な攻撃モードをサポートし、高速かつ柔軟な解析が可能です。解析したパスワードは記録され、重複解析を防止する機能もあります。
https://ja.taiwebs.com/windows/download-hashcat-6759.html
ネット投票できるのは投票日の直前1日前(期日前投票と同じ)扱いにすればいいんだよ。
その後、投票日に気が変わったら上書き投票できるようにすればいいでしょう。
それで、2と3はクリアできるわけ。
仮に、締め切り10分の前に投票させたとしても、翌日の投票日に違う党に投票できるでしょ。
何よりそういう不正野郎の犯罪者は、こっそり撮影してあげて違法選挙の証拠として警察に通報して、連座制適応で芋づる式に刑務所に入れるべきだ。
投票日には投票所に入れに行けるなら、サーバダウンも関係ないわけだしね。
個人認証はマイナンバーで管理すれば、確実に一人1票で上書き投票も実現できるだろう。
もちろん、秘密投票であるべきだから、誰がどこに投票したかのログは取ってはいけない。
上書き機能の実現のために、サーバの仕組み上必要だとしたら、一方向ハッシュ値とかで管理して、わからないようにするべきだね。
はい、**ブロックチェーンを使ったタイムスタンプ**は、「元データそのものを共有せずに、その存在と時刻を証明する手段」として非常に有効です。特に、ハッシュ値をブロックチェーンに記録することで、元データを後から提示するだけで、それがある時刻に存在したこと・改竄されていないことを**誰でも検証可能にする**、という形になります。
あなたの希望(元の文章が掲示板などで変形されても検証可能、あるいは元文不要)に近づけるには、**ハッシュをブロックチェーンに書き込んで、後からそのハッシュに一致する元データを見せる**という形式になります。
---
### 基本の流れ:
2. そのハッシュをブロックチェーンに記録(トランザクションのメモ欄など)
3. 後から誰でもハッシュとトランザクションを照合して、時刻と整合性を検証可能
---
## ✅ 推奨ツール:OpenTimestamps(OTS)
[OpenTimestamps](https://opentimestamps.org/) は、ビットコインのブロックチェーンを用いた無料のタイムスタンプサービスです。
---
## ✅Windows11 での手順(OpenTimestampsCLI)
Pythonがまだ入っていない場合は、https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/)からインストーラーを取得し、`Add toPATH` にチェックを入れてインストールしてください。
コマンドプロンプトまたはPowerShellで以下を実行:
```bash
pip install opentimestamps-client
```
たとえば `message.txt` というファイルを用意します(中身は何でもOK)。
```bash
```
これにより、`message.txt.ots` というタイムスタンプファイルが作成されます。
これは「Bitcoinにこのデータのハッシュを記録する要求がされたこと」を表します。
```bash
```
署名がBitcoinブロックチェーンに記録されていれば、次のように表示されます:
```
Success!Bitcoin attests data existedas of 2025-06-0812:34:56UTC
```
---
```bash
echo -n "あなたの文" |openssl dgst -sha256
```
このハッシュに一致するファイルを後から提示すれば、それが当時存在していたことを証明できます。
---
## ✅ まとめ
| 特徴 | 内容 |
| ------------- | -------------------- |
| 元文の提示は不要 | ✅(ハッシュが一致すればOK) |
| 改行や掲示板変形の影響なし | ✅(ハッシュが変わらなければOK) |
| 無料かつ自律的 | ✅(Bitcoinブロックチェーン使用) |
| Windows対応 | ✅(Python +CLI) |
---
もしあなたの目的が「一定時刻に自分がその文を作成したことの証明」であるなら、この方法は非常に相性が良いです。
---
必要であれば、GUIツールやウェブインターフェースを使った方法(例:[OpenTimestamps Calendar](https://calendar.opentimestamps.org/))も紹介できます。希望があればお知らせください。
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA51220250610095304512 -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEgAgAAKCRBwMdsubs4+SII/AP9HFG5+U8BfEXzKxSoyEuxm6X/vJjK7Ee7Kwpi/rwQZJgEAorUjMTh9okHu3WbPvgsSfDyzhpUuwCVsKessR4FSpQE==VNrS-----ENDPGP SIGNATURE-----
元増田で述べたような方法が、不正が入り込む余地がないと外部から判断できる電子的な乱数生成方法で、
それを使って神経衰弱のように大量のカードを裏向きに伏せて、その中から1枚を選ぶというのが
カードを選ぶ時点で、裏向きのカードを生成する乱数シードは確定しているので
(ハッシュ値の性質上、天文学的に運がよければ選んでからカードの裏面を変更できることもありうるけど、それは隕石が頭に当たって死ぬ以上に無視していい確率だ)
ビットコインマイニングは、ビットコインネットワークのトランザクションを確認し、新たなビットコインを生成するプロセスである。
これは数学的な問題を解くことによって行われる。具体的には、以下のようなステップが含まれる:
1. 新しいブロックの作成:マイナーは未確認のトランザクションから新しいブロックを作成。
2.ハッシュの計算:マイナーは新しいブロックのハッシュを計算。ハッシュ関数は、任意の長さのデータを固定長のハッシュ値に変換。ビットコインでは、SHA-256というハッシュ関数が使用される。
3.難易度ターゲットの比較:計算されたハッシュが難易度ターゲット以下であるかどうかを確認。難易度ターゲットは、ネットワーク全体のマイニングパワーに基づいて調整される。
4.ブロックの追加:ハッシュが難易度ターゲット以下であれば、そのブロックは有効とされ、ブロックチェーンに追加される。そして、そのブロックを作成したマイナーは新たなビットコイン(ブロック報酬)とトランザクション手数料を受け取る。
これらのステップを繰り返すことで、ビットコインマイニングは行われる。
このプロセスは競争的であり、最初に問題を解いたマイナーだけが報酬を受け取ることができる。
僕はプログラミング歴2週間の初心者です。キーと値を入力できるデータベースを作っています。
以下のコードを実行してデータを追加し続けると、一定のサイズを超えるとエラーが出てしまうみたいです。
理想は、データが追加された後にサイズが足りなくなったら動的に自動拡大されることです。
もし詳しい人がいたらご教示お願い致します。
import sysimportosimportmmapimport hashlibdef h(x): return int(hashlib.sha512(x.encode()).hexdigest(), 16)def create_db(filename): withopen(filename, 'wb')as f: f.write(b'\0' * 1024 * 1024) # 1MBの空ファイルを作成defset_key(filename,key,value): withopen(filename, 'r+b')as f:mm =mmap.mmap(f.fileno(), 0)pos = h(key) %mm.size() whilemm[pos:pos+1] != b'\0':pos = (pos + 1) %mm.size() ifpos == h(key) %mm.size():f.seek(0,os.SEEK_END) f.write(b'\0' *mm.size()) #ファイルサイズを2倍にするmm =mmap.mmap(f.fileno(), f.tell()) #ファイルサイズを反映させるpos = h(key) %mm.size() #ハッシュ値を再計算する data =key + '\0' +value + '\0' data = data.encode()mm[pos:pos+len(data)] = datamm.close() #mmapオブジェクトを閉じるdefget_key(filename,key): withopen(filename, 'r+b')as f:mm =mmap.mmap(f.fileno(), 0)pos = h(key) %mm.size() whilemm[pos:pos+1] != b'\0': end =mm.find(b'\0',pos,mm.size()) # 第2引数と第3引数を指定する if end == -1: end =mm.size() ifmm[pos:end].decode() ==key:pos = end + 1 end =mm.find(b'\0',pos,mm.size()) # 第2引数と第3引数を指定する if end == -1: end =mm.size()value =mm[pos:end].decode()mm.close() #mmapオブジェクトを閉じる returnvaluepos = (pos + 1) %mm.size() ifpos == h(key) %mm.size(): breakmm.close() #mmapオブジェクトを閉じる return Nonedefmain(): cmd = sys.argv[1] if cmd == 'create': create_db(sys.argv[2]) elif cmd == 'set':set_key(sys.argv[2], sys.argv[3], sys.argv[4]) elif cmd == 'get':print(get_key(sys.argv[2], sys.argv[3]))if __name__ == '__main__':main()
異常な幻想の網に捕らわれ、PTSDの闇に沈んでおり、仕事からの離脱を余儀なくされております。
その幻想は、あまりにも鮮烈であったため、現実か夢か、いまだに疑念が拭えぬものとなりました。
認識の糸が紡ぎとどけず、安定した現実がどこに棲むのか、それを問い詰めざるを得ません。
思考の結晶を抽象的な形に仕立て上げ、それを操ることは、極めて魅力的であり、しかも財政的な負担は一切生じません。
傷病手当金の恩恵に浴しており、感謝の念に堪えません。その支給期間が続く限り、職場の扉を閉じる覚悟でおります。
この転向した日記は、"勉強日記"のカテゴリーからの移行でございます。
"勉強日記"という名は、絶え間ない学びを要求されるという、何とも重苦しい響きがあったため、精神的な疲弊を感じておりました。
"廃人日記"の名に変えることで、統合失調症の患者が日々の苦闘を語る場として、うってつけでございます。
真正性の保証のために、特別なプロセスにより、内容にハッシュ値を刻み付けることに決意いたしました。
他のブログプラットフォームも一縷の望みを託しましたが、結局、匿名性の高いダイアリーが最も筆が進むようでございます。
私は、被害妄想に囚われると、コンテンツを一掃する衝動に駆られますが、匿名ダイアリーはその記録が永遠に残るという、安心感をもたらしております。
hash: 38d8d7e05e9f40a04eec8e6da9f768a3
俺:
javascript言語で、現在時刻のタイムスタンプからMD5のハッシュ値を出力する関数、timeToMd5 を作ってください
JavaScriptでは、次のような関数を作成することができます。
function timeToMd5() { //現在時刻のタイムスタンプを取得しますconst timestamp =Date.now(); //ハッシュ値を出力するために、MD5ライブラリをロードしますconstmd5 =require('md5'); // timestampを文字列に変換し、それをMD5ハッシュ値に変換して出力しますconst hash =md5(timestamp.toString()); return hash;}
このような関数を作成することで、現在時刻のタイムスタンプからMD5のハッシュ値を出力することができます。
ご参考までに。
俺:
nodeコマンドで実行しましたが、"Error: Cannot findmodule 'md5'" というエラーになってしまいました。なにか解決方法がありますか?
ご質問のように、JavaScriptで定義した関数を実行すると、"Error: Cannot findmodule 'md5'" というエラーが発生しているようです。
このエラーが発生する原因は、JavaScriptのコード内で、MD5ライブラリをロードしようとしたときに、そのライブラリがインストールされていないためです。
JavaScriptのコードで、MD5ライブラリを利用するには、まず、そのライブラリをインストールする必要があります。
インストールするには、次のように、nodeコマンドを実行します。
$ npm installmd5
このコマンドを実行することで、MD5ライブラリがインストールされ、JavaScriptのコードから利用することができるようになります。
また、JavaScriptのコードを実行するには、次のようにnodeコマンドを使用します。
$ node [JavaScriptのファイル名]
このようにすることで、JavaScriptのコードを実行することができます。
ご参考までに。
俺:
ありがとうございます。実行できました😁
おめでとうございます!ご質問いただいた内容について、正しく解決されたようで嬉しいです。
もしまだご質問があるようでしたら、お気軽にお問い合わせください。今後とも、Assistantをご利用いただけますよう、よろしくお願いいたします。
まぁ、下っ端プログラマには要らないだろうけど、いわゆるシステムエンジニアとかアーキテクトとか言われるレベルの仕事するには、なるべく知っとかないといけないよね。
オレの場合は、大学はかろうじて理系の一角だったけど、学問的にコンピュータサイエンスを学んだことはなくて、某IT会社でなかば業務上の必要に迫られ、なかば趣味的な興味本位もありで、ちょっとずつ勉強した。
で、もう20年くらい前だし、すでに廃止されてる(と思う)ので、守秘義務違反とかの面倒なことにならなそうだと想定してぶっちゃけると、大手携帯会社のショップで各店舗独自のプロモーション打ったりするためのWebシステムの開発に関わったことがある。
顧客の(および自分とこの)エライ人なんかに、システムの設計の根拠(この方式が最善なのか?もっと安く早くやれる方法はないのか?などなど)を常に問いかけられ、説明説得しなきゃならない。そこでコンピュータサイエンスに基づいて理路整然と話をすると、ちゃんと信頼してもらえるし、納得してカネ払ってもらえるw
そこで使ったのが、以下のような各種理論だ:
などなど...自分史上最高に残業させられたこの仕事やってた年の年収は、900万円台おしくも1000万には届かなかったねぇw
--追記--
コンピュータサイエンスがらみの思い出でもう一個面白い(とオレが思う)ネタがあるので、ついでに書いとこうw
これは、上で書いた携帯会社のシステムよりだいぶ前のことになるが、とあるグループウェアの開発に関わってたとき、メールをFAXに向けて出力するドライバを書いたことがある。昔のことなのでオープンソースもあんまり普及してないし、タダでお手軽に使えるライブラリが見つからなかったので、「車輪の再発明」っぽいけど自分でハフマン符号化によるデータ圧縮のアルゴリズムを勉強して作ったのだ。
Win32のAPIとか呼び出して、ビットマップにテキストを描画させたとこから、ドットをちまちま数えて、白のドットがいくつ続いてたらこのコード、黒がいくつ続いてたらあのコード...って可変長のビットパターンをつなぎ合わせてファイルに書き出す...みたいな。これが理論通りにうまいこと動作して、FAXから文書が出てきた時はとっても楽しかったw