回答編集履歴

2

python改良版のコードを追記

2020/07/17 06:44

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -53,3 +53,43 @@
53
53
  デバッグのヒント: まずは小さなデータを対象に
54
54
 
55
55
  「計算対象のデータ」「計算されたハッシュ値」の双方を表示すると違いに気づくと思います。
56
+
57
+
58
+
59
+ ----
60
+
61
+ 追記2
62
+
63
+
64
+
65
+ コメントに書いたpythonのコードは確認用の短いコードで、
66
+
67
+ サイズの大きなファイルには使えないので、改良版のコードを追記しておきます。
68
+
69
+
70
+
71
+ 出典: https://stackoverflow.com/questions/3431825/generating-an-md5-checksum-of-a-file
72
+
73
+
74
+
75
+ ```
76
+
77
+ import hashlib
78
+
79
+ def md5sum(filename, blocksize=65536):
80
+
81
+ hash = hashlib.md5()
82
+
83
+ with open(filename, "rb") as f:
84
+
85
+ for block in iter(lambda: f.read(blocksize), b""):
86
+
87
+ hash.update(block)
88
+
89
+ return hash.hexdigest()
90
+
91
+
92
+
93
+ print(md5sum("./files/0a39bcc9c0647cf569c6d7108726ec596007ed80"))
94
+
95
+ ```

1

node.js のコードと pythnon のコードの相違点について追記

2020/07/17 06:44

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -27,3 +27,29 @@
27
27
 
28
28
 
29
29
  ハッシュ値計算は問題ありません。問題は与えるデータが違う点です。
30
+
31
+
32
+
33
+ ----
34
+
35
+
36
+
37
+ ./files/0a39bcc9c0647cf569c6d7108726ec596007ed80 を読み込んでいますが
38
+
39
+ 違いを分かりやすくするために、ファイル名を `test.txt` ファイルの中身は `ABC`とします。
40
+
41
+
42
+
43
+ node.js のコードでは、ファイル `test.txt` の中身の文字列 「`ABC`」 のハッシュ値を計算
44
+
45
+ python のコードは 「`test.txt`」という文字列のハッシュ値を計算。
46
+
47
+
48
+
49
+ 解決策: Pythonのコードでもファイルの中のデータを読み込むように対応する。
50
+
51
+
52
+
53
+ デバッグのヒント: まずは小さなデータを対象に
54
+
55
+ 「計算対象のデータ」「計算されたハッシュ値」の双方を表示すると違いに気づくと思います。