タグ

技術と雑記に関するpongepongeのブックマーク (2)

  • 2で割ることと3で割ること - Qiita

    この記事でお題にするのはCPUレジスタ上の整数除算です。以下、単に除算とも書きます。 除算は非常に高コストな演算なため、コンパイラは最適化によって、できるだけ整数除算を別の計算に置き換えようとします。 最適化ができる場合の一つとして、割る数が定数である場合があります。頭のいいコンパイラは、除算を乗算とビットシフト等を駆使した演算に置き換えます。この記事では、そういった最適化の背景にある理屈を部分的に解説します。 計算機環境としてはモダンなx86 CPUを仮定します。したがってレジスタは32/64ビットであり、負数は2の補数表現になっています。ある程度は他の命令セットでも通用する話になっているかもしれません。 そもそも整数の除算とは プログラミングにおける整数の除算の定義について確認します。整数$n$を整数$d$で割るとき $$ n = q \times d + r $$ が成り立つように除

    2で割ることと3で割ること - Qiita
  • Zipファイルのクラック

    メールでZipファイルを送って次のメールでパスワードを送るという無意味より悪いセキュリティ対策が問題になっている。なぜ無意味より悪いかというと,Zip暗号化は強度が十分でない上に,次のメールで送るパスワードは無意味で,さらにゲートウェイでのウイルス対策ができなくなるのでウイルス送付に利用されやすいためである。 PythonZipファイルを展開する方法は文字コードのところに書いたが,同様にしてパスワードをブルートフォースで破ることも原理的には可能である。4桁数字のパスワードで暗号化した test.zip をクラックするには次のようにすればよいであろう: from zipfile import ZipFile with ZipFile('test.zip') as z: for i in range(10000): pw = f'{i:04d}' try: z.setpassword(pw.

  • 1