500バイトで書けるSHA256生成スクリプト(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。原著者の許諾を得て翻訳・公開いたします。500バイト1q,z=[3,2].map{|t|i=l=1;(2..330).select{i-1<(l*=i)%i+=1}.map{|e|(e**t**-1*X=2**32).to_i&X-=1}}s=proc{|n,*m|a=0m.map{|e|a^=n>>e|n<<32-e}a}i=$<.read.b<<128(i+"\0"*(56.-(w=i.size)%64)+[~-w*8].pack('Q>')).gsub(/.{64}/m){w=$&.unpack'N*'y=z64.times{|i|i>15&&w[i]=w[i-16]+(s[v=w[i-15],7,18]^v>>3)+w[i-7]+(s[w[i-2],17,19]^w[i-2]>>10)&Xf=y[7]+s[u=y[4],6,11,25]+(u&y[5]^~u&y[6])+q[i]+w[i]y=[f+s[y[0],2,13,22]+(y[0]&y[1]^y[0]&y[2]^y[1]&y[2])&X]+yy[4]=y[4]+f&X}z=z.zip(y).map{|a,b|a+b&X}}$><<'%.8x'*8%z上は、とあるコードゴルフコンテスト(現在はありません)に送信されたコードをベースにしており、これよりもさらに短いものも送信されていたので、これをさらに短くすることも可能です。プルリクを探してみてください!テストスクリプト上のコードをsha256.rbというファイルに保存して、同じディレクトリに以下のテストスクリプトを作成します。自分のクラスに`#to_a`を実装すべきじゃない(翻訳)上のコードは実際には501バイトですが、"\0"を本物のnullバイトに置き換えることもできます。コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。enno.jpを運営。実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。