猫史档案馆


【Python作品分享】新的作品-3【求助帖】

用户:活波的飓风雀HSWK活波的飓风雀HSWK查看:0 回复:2 评论:0 创建时间:2023-07-28T16:09:13


【作品展示】

center_image

 

【作品介绍】

这是一个用于哈希碰撞的作品。我希望寻找那些字符串经过哈希算法加密之后还能具有相同的哈希值。由于计算量巨大,本来是256位的算法,现在已经被砍到了16位。但是没想到这个程序一运行就报错了,不知道怎么回事。

 

【作品源代码】

import hashlib
import numpy as np
from numba import cuda
@cuda.jit
def generate_hash(data, bit_width, hash_values):
    idx = cuda.threadIdx.x + cuda.blockDim.x * cuda.blockIdx.x
    stride = cuda.gridDim.x * cuda.blockDim.x

    for i in range(idx, hash_values.shape[0], stride):
        hash_object = hashlib.sha256(data[i].encode('utf-8'))
        hash_hex = hash_object.hexdigest()
        hash_value = hash_hex[:bit_width]
        hash_values[i] = hash_value
def find_hash_collision(bit_width):
    num_threads = 256
    num_blocks = (len(data) + num_threads - 1) // num_threads
    data_gpu = cuda.to_device(data)
    hash_values_gpu = cuda.device_array_like(hash_values)
    generate_hash[num_blocks, num_threads](
        data_gpu, bit_width, hash_values_gpu)
    hash_values_gpu.copy_to_host(hash_values)
    hash_set = set()
    for i in range(len(data)):
        hash_now = hash_values[i]
        if hash_now in hash_set:
            return hash_now, data[i]
        hash_set.add(hash_now)
if __name__ == '__main__':
    data = ['string1', 'string2', 'string3', ...] 
    bit_width = 4
    hash_values = np.empty(len(data), dtype=np.str)
    collision_hash, collision_string = find_hash_collision(bit_width)
    print("Collision Hash: ", collision_hash)
    print("Collision String: ", collision_string)

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
ywcwywcw

这个代码报错的原因可能是因为缺少一些必要的变量或模块。根据你提供的代码,我注意到在函数find_hash_collision中使用了变量data和hash_values,但是它们在函数之外没有定义。另外,你还需要确保已经安装了hashlib、numpy和numba这些库。
为了解决这个问题,你可以按照以下步骤进行修改:
确保已经导入了hashlib、numpy和numba模块。你可以在代码开头添加以下导入语句:

import hashlib
import numpy as np
from numba import cuda

在find_hash_collision函数之前定义data和hash_values变量。你需要根据你的需求将data变量定义为一个包含字符串的列表,并将hash_values定义为一个空的字符串数组。例如:

data = ['string1', 'string2', 'string3', ...]
hash_values = np.empty(len(data), dtype=np.str)

确保在find_hash_collision函数中使用的变量在函数之前已经定义。这包括data和hash_values变量。
确保你的代码中没有其他语法错误或逻辑错误。
完成以上修改后,你的代码应该能够正常运行。如果你仍然遇到问题,请提供完整的错误信息,以便我能够更好地帮助你解决问题。

这是AI给出的答案,注意第二条代码data = ['string1','string2','stirng3',...]运行代码是别家...和,

点赞0


评论


ywcwywcw

center_image

这行代码有问题,不要加,...

点赞0


评论