当前位置: 首页 > 工具软件 > md5s > 使用案例 >

python中md5方法返回值_MD5散列在Python中返回不同的结果

丁灿
2023-12-01

对于类赋值,我应该获取文件的内容,计算MD5散列并将其存储在单独的文件中。然后我应该能够通过比较MD5散列来检查完整性。我对Python和JSON还比较陌生,所以我想我应该尝试用这个任务来解决这些问题,而不是使用我已经知道的东西。在

不管怎样,我的程序从一个文件中读取,创建一个散列,并将该散列存储到一个JSON文件中。问题出在我的诚信检查上。当我返回文件的计算哈希的结果时,它与JSON文件中记录的结果不同,即使文件没有进行任何更改。下面是正在发生的事情的一个例子,我也粘贴了我的代码。提前谢谢你的帮助。在

例如:这些是我的JSON文件的内容

内容:b'我制作了一个文件来测试md5\n'

文摘:1e8f4e6598be2ea2516102de54e7e48e

当我尝试检查同一个文件的完整性时,返回的内容如下(未对其进行任何更改):

内容:b'我制作了一个文件来测试md5\n'

摘要:ef8b7bf2986f59f8a51aae6b496e8954import hashlib

import json

import os

import fnmatch

from codecs import open

#opens the file, reads/encodes it, and returns the contents (c)

def read_the_file(f_location):

with open(f_location, 'r', encoding="utf-8") as f:

c = f.read()

f.close()

return c

def scan_hash_json(directory_content):

for f in directory_content:

location = argument + "/" + f

content = read_the_file(location)

comp_hash = create_hash(content)

json_obj = {"Directory": argument, "Contents": {"filename": str(f),

"original string": str(content), "md5": str(comp_hash)}}

location = location.replace(argument, "")

location = location.replace(".txt", "")

write_to_json(location, json_obj)

#scans the file, creates the hash, and writes it to a json file

def read_the_json(f):

f_location = "recorded" + "/" + f

read_json = open(f_location, "r")

json_obj = json.load(read_json)

read_json.close()

return json_obj

#check integrity of the file

def check_integrity(d_content):

#d_content = directory content

for f in d_content:

json_obj = read_the_json(f)

text = f.replace(".json", ".txt")

result = find(text, os.getcwd())

content = read_the_file(result)

comp_hash = create_hash(content)

print("content: " + str(content))

print(result)

print(json_obj)

print()

print("Json Obj: " + json_obj['Contents']['md5'])

print("Hash: " + comp_hash)

#find the file being searched for

def find(pattern, path):

result = ""

for root, dirs, files in os.walk(path):

for name in files:

if fnmatch.fnmatch(name, pattern):

result = os.path.join(root, name)

return result

#create a hash for the file contents being passed in

def create_hash(content):

h = hashlib.md5()

key_before = "reallyBad".encode('utf-8')

key_after = "hashKeyAlgorithm".encode('utf-8')

content = content.encode('utf-8')

h.update(key_before)

h.update(content)

h.update(key_after)

return h.hexdigest()

#write the MD5 hash to the json file

def write_to_json(arg, json_obj):

arg = arg.replace(".txt", ".json")

storage_location = "recorded/" + str(arg)

write_file = open(storage_location, "w")

json.dump(json_obj, write_file, indent=4, sort_keys=True)

write_file.close()

#variable to hold status of user (whether they are done or not)

working = 1

#while the user is not done, continue running the program

while working == 1:

print("Please input a command. For help type 'help'. To exit type 'exit'")

#grab input from user, divide it into words, and grab the command/option/argument

request = input()

request = request.split()

if len(request) == 1:

command = request[0]

elif len(request) == 2:

command = request[0]

option = request[1]

elif len(request) == 3:

command = request[0]

option = request[1]

argument = request[2]

else:

print("I'm sorry that is not a valid request.\n")

continue

#if user inputs command 'icheck'...

if command == 'icheck':

if option == '-l':

if argument == "":

print("For option -l, please input a directory name.")

continue

try:

dirContents = os.listdir(argument)

scan_hash_json(dirContents)

except OSError:

print("Directory not found. Make sure the directory name is correct or try a different directory.")

elif option == '-f':

if argument == "":

print("For option -f, please input a file name.")

continue

try:

contents = read_the_file(argument)

computedHash = create_hash(contents)

jsonObj = {"Directory": "Default", "Contents": {

"filename": str(argument), "original string": str(contents), "md5": str(computedHash)}}

write_to_json(argument, jsonObj)

except OSError:

print("File not found. Make sure the file name is correct or try a different file.")

elif option == '-t':

try:

dirContents = os.listdir("recorded")

check_integrity(dirContents)

except OSError:

print("File not found. Make sure the file name is correct or try a different file.")

elif option == '-u':

print("gonna update stuff")

elif option == '-r':

print("gonna remove stuff")

#if user inputs command 'help'...

elif command == 'help':

#display help screen

print("Integrity Checker has a few options you can use. Each option "

"must begin with the command 'icheck'. The options are as follows:")

print("\t-l : Reads the list of files in the directory and computes the md5 for each one")

print("\t-f : Reads a specific file and computes its md5")

print("\t-t: Tests integrity of the files with recorded md5s")

print("\t-u : Update a file that you have modified after its integrity has been checked")

print("\t-r : Removes a file from the recorded md5s\n")

#if user inputs command 'exit'

elif command == 'exit':

#set working to zero and exit program loop

working = 0

#if anything other than 'icheck', 'help', and 'exit' are input...

else:

#display error message and start over

print("I'm sorry that is not a valid command.\n")

 类似资料: