本日はクラウドワークスに出ていた
ツール作成の依頼のお値段のお話です
解説動画はこちら
さて
まずはこの求人の方ですが
こちらです。
sha256の逆変換ツール
さて仕事内容を見てみましょう。
仕事の詳細
例1:
これがどれだけ大変なお仕事か・・・
まずはこのsha256についてですが
Secure Hash Algorithm 256-bitの略で
256ビット(32バイト)長の
ハッシュ値を得ることができますが
暗号は復号を行って元の値をみる事ができますが
ハッシュは一方的な変換のため
元の値を参照できません。
ですので、この依頼は
かなり難しい内容である事が分かると思います。
Pythonではこのハッシュ化は
簡単に行う事ができます。
次のようなコードで文字列を
ハッシュ化する事ができます。
もし逆変換のツールを作るとしたら
何回も入力値を変えてハッシュ化して
そのハッシュ値と合うかどうかを
試していくしかありません。
仮で英数字の36種類で
文字数別での総当たり回数を求めてみると
こんな感じになりました。
10文字のハッシュ化の答え合わせでも
桁がわからないくらい多いですね。
これが64文字だとしたら・・・
4011991914547630480065053387702443812690402487741812225955731622655455723258857248542161222254985216
最低でもこれくらいの回数です。
漢字や平仮名、記号なども含めたら
途方もない文字種類になるので
さらに回数は増えてしまいます。
現実的には64文字での復号は無理でしょう。
少ない文字種、文字数であれば
次のようなプログラムで
総当たりで解く事ができます。
と言う事で64桁なら
物凄い台数のPCを用意して上げて
総当たりを実行すれば解けるかもしれません。
1台100万円でも
10**100台ほど用意して
あげれば良いかもしれません。
解けたころには
地球はないかもしれませんがね。
さて
なかなか面白い仕事でしたねーー
クラウドワークス
たまに覗いてみると
面白い仕事が
見つかるかもしれませんよ
今回はこれまでです
それでは。
ツール作成の依頼のお値段のお話です
解説動画はこちら
さて
まずはこの求人の方ですが
こちらです。
sha256の逆変換ツール
さて仕事内容を見てみましょう。
お題:sha256の逆変換ツール
固定報酬制 100,000円 〜 300,000円
仕事の詳細
任意のHash(64桁)の入力値に対し
sha256の逆変換を10秒以内で
求めるプログラムを作成して下さい
sha256の逆変換を10秒以内で
求めるプログラムを作成して下さい
例1:
b924ed427f4540e17a6c669982bf2373f2974f6733b7a737a08a6c49b0f70b81 <==入力値
(逆変換)↓ ↑ (Sha256)
eb6019e16fc6169662a87df672554ea74365bca49bae3f76200e33622c3f0335 <==求めてほしいもの
これがどれだけ大変なお仕事か・・・
まずはこのsha256についてですが
読み:しゃーにごろ
などの読み方です。
などの読み方です。
Secure Hash Algorithm 256-bitの略で
任意の長さのデータから固定長の
出力データを返すハッシュ関数の一つです。
出力データを返すハッシュ関数の一つです。
256ビット(32バイト)長の
ハッシュ値を得ることができますが
データを一方向にしか変換できず
ハッシュ化されたデータを
元のデータに戻すことは基本的にできません。
元のデータに戻すことは基本的にできません。
暗号は復号を行って元の値をみる事ができますが
ハッシュは一方的な変換のため
元の値を参照できません。
ですので、この依頼は
かなり難しい内容である事が分かると思います。
Pythonではこのハッシュ化は
簡単に行う事ができます。
次のようなコードで文字列を
ハッシュ化する事ができます。
import hashlib text = "otupy" hash_text = hashlib.sha256(text.encode()).hexdigest() print(hash_text)
f662f0d21fac3d9c5903e24b81ce4a2f5a5557258378db2ab79e464e27c4c2b0
もし逆変換のツールを作るとしたら
何回も入力値を変えてハッシュ化して
そのハッシュ値と合うかどうかを
試していくしかありません。
仮で英数字の36種類で
文字数別での総当たり回数を求めてみると
for i in range(1,11): print('文字数 : {0:02}文字 , 回数{1:020,}'.format(i,36 ** i))
文字数 : 01文字 , 回数0,000,000,000,000,036
文字数 : 02文字 , 回数0,000,000,000,001,296
文字数 : 03文字 , 回数0,000,000,000,046,656
文字数 : 04文字 , 回数0,000,000,001,679,616
文字数 : 05文字 , 回数0,000,000,060,466,176
文字数 : 06文字 , 回数0,000,002,176,782,336
文字数 : 07文字 , 回数0,000,078,364,164,096
文字数 : 08文字 , 回数0,002,821,109,907,456
文字数 : 09文字 , 回数0,101,559,956,668,416
文字数 : 10文字 , 回数3,656,158,440,062,976
こんな感じになりました。
10文字のハッシュ化の答え合わせでも
桁がわからないくらい多いですね。
これが64文字だとしたら・・・
4011991914547630480065053387702443812690402487741812225955731622655455723258857248542161222254985216
最低でもこれくらいの回数です。
漢字や平仮名、記号なども含めたら
途方もない文字種類になるので
さらに回数は増えてしまいます。
現実的には64文字での復号は無理でしょう。
少ない文字種、文字数であれば
次のようなプログラムで
総当たりで解く事ができます。
import hashlib import string import itertools text = "otupy" repeat = 5 text = text[0:repeat] answer = hashlib.sha256(text.encode()).hexdigest() print('answer : {0}'.format(answer)) st = string.ascii_lowercase + string.digits print('文字種 : {0}'.format(st)) for s in itertools.product(st,repeat=repeat): hash_text = hashlib.sha256(''.join(s).encode()).hexdigest() if hash_text == answer: print(''.join(s)) break
answer : f662f0d21fac3d9c5903e24b81ce4a2f5a5557258378db2ab79e464e27c4c2b0
文字種 : abcdefghijklmnopqrstuvwxyz0123456789
otupy
と言う事で64桁なら
物凄い台数のPCを用意して上げて
総当たりを実行すれば解けるかもしれません。
1台100万円でも
10**100台ほど用意して
あげれば良いかもしれません。
解けたころには
地球はないかもしれませんがね。
さて
なかなか面白い仕事でしたねーー
クラウドワークス
たまに覗いてみると
面白い仕事が
見つかるかもしれませんよ
今回はこれまでです
それでは。
コメントする