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

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

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

  • 写回答

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日

悬赏问题

  • ¥15 Java与Hbase相关问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥45 工程软件单片机设计课题要求
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)