Stay_close 2023-11-26 18:23 采纳率: 83.3%
浏览 7

关于同态加密在明文不是数字的情况

当消息为数字的时候,同态性可以很容易验证,那么当消息不为数字时,比如说消息是字符串的情况下,如何进行同态加密?对两密文做聚合后,可不可以实现明文是两消息的拼接?

  • 写回答

2条回答 默认 最新

  • DTcode7 前端领域优质创作者 2024-05-17 08:39
    关注

    回答引用自chatgpt,希望对您有所帮助

    同态加密是一种在不暴露原文信息的情况下,对加密数据进行计算的方法。它允许我们在密文上进行各种操作,如加法、乘法等,而不需要解密。这对于保护数据的隐私和安全非常有用。然而,同态加密的一个限制是它只适用于数字数据。如果明文不是数字,我们需要使用其他方法来处理。

    一种解决方案是将非数字明文转换为数字表示。这可以通过将每个字符映射到一个唯一的数字来实现。例如,我们可以使用ASCII码将字符映射到数字。然后,我们可以使用同态加密对这些数字进行加密和计算。最后,我们可以将结果转换回原始的字符表示。

    以下是一个使用Python实现的简单示例:

    # 导入所需库
    from phe import paillier
    
    # 生成密钥对
    public_key, private_key = paillier.generate_paillier_keypair()
    
    # 定义一个函数,将字符串转换为数字列表
    def string_to_numbers(s):
        return [ord(c) for c in s]
    
    # 定义一个函数,将数字列表转换回字符串
    def numbers_to_string(numbers):
        return ''.join([chr(n) for n in numbers])
    
    # 加密字符串
    plaintext = "Hello, world!"
    numbers = string_to_numbers(plaintext)
    encrypted_numbers = [public_key.encrypt(n) for n in numbers]
    
    # 对加密数字进行计算(例如,将所有数字相加)
    sum_encrypted_numbers = sum(encrypted_numbers)
    
    # 解密结果
    decrypted_sum = private_key.decrypt(sum_encrypted_numbers)
    decrypted_numbers = [private_key.decrypt(n) for n in encrypted_numbers]
    decrypted_string = numbers_to_string(decrypted_numbers)
    
    print("原始字符串:", plaintext)
    print("加密后的数字列表:", encrypted_numbers)
    print("解密后的数字列表:", decrypted_numbers)
    print("解密后的字符串:", decrypted_string)
    

    这个示例使用了phe库中的Paillier同态加密算法。首先,我们生成了一个密钥对,然后将字符串转换为数字列表。接下来,我们对数字列表进行加密,并对加密后的数字进行计算。最后,我们将结果解密并转换回原始的字符串表示。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月26日

悬赏问题

  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题
  • ¥15 MS中不知道高分子的构型怎么构建模型
  • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)