【问题标题】:Simple Encrypted Arithmetic Library (SEAL) how to save the ciphertext to a file简单加密算术库 (SEAL) 如何将密文保存到文件中
【发布时间】:2019-02-23 19:52:12
【问题描述】:

我在 C++ 中使用 SEAL 库。我想将密文保存到文件中。我正在考虑将其转换为字符串类型并保存它。我想要一个包含所有密文的文件,并在需要时将文件上传到内存以再次使用它们。我还必须保存加密和解密密钥,以便以后解密结果。

有人使用过这个密码库并且知道如何将生成的密文保存到文件中吗?我只是在学习如何使用这个库,而且我是 C++ 新手,所以我正在努力解决这个问题。

谢谢!

【问题讨论】:

  • 密文提供save()load() 函数。您可以使用save() 将密文保存到stringstream 变量中,然后将它们写入文件。稍后您可以从文件中读取到stringstream 变量并使用load() 函数将其加载到密文中。但我认为你应该将你的私钥、公钥和定义的参数保存到文件中,如果你想稍后解密保存的密文。他们的实例还提供save()load() 函数。
  • 我和你有同样的意图,并询问是否在此处保存密文stackoverflow.com/q/51416347/4418333 当然,我最终使用了提供的save()load() 密文函数。
  • 就像 TalG 所说,您可以对所有这些类型使用 save()load() 方法。请注意,他们将内容写入/读取到任何流,例如fstream,因此在写入文件时不必在两者之间使用stringstream。确保在打开fstream 时使用ios::binary 标志。
  • @TalG。谢谢,我了解了这些功能 save() 和 load() 以及您发布的问题。我将密文保存在字符串流中,然后使用 stringstream.str() 将内容保存到文件中。我不确定使用 str() 是否正确。我得到了很多符号,但我无法加载密文。你是这样保存密文的吗?我将阅读 Kim Laine 提到的 ios::binary 以尝试将密文保存到 fstream。谢谢你们俩。

标签: seal


【解决方案1】:

这就是我的做法。

对于这两种操作,我都使用这样提供的 API:

void saveCiphertext(Ciphertext encrypted, string filename){
  ofstream ct;
  ct.open(filename, ios::binary);
  encrypted.save(ct);
};

再次加载有两种方法:


/* 
  If you can't / don't want / don't need to verify the encryption parameters
*/
Ciphertext unsafe_loadCiphertext(string filename){

  ifstream ct;
  ct.open(filename, ios::binary);
  Ciphertext result;
  result.unsafe_load(context);

  return result;
};

// Verifying encryption parameters
Ciphertext loadCiphertext(string filename, EncryptionParameters parms){

  auto context = SEALContext::Create(parms);

  ifstream ct;
  ct.open(filename, ios::binary);
  Ciphertext result;
  result.load(context, ct);

  return result;
};

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2019-01-30
    • 1970-01-01
    • 2010-12-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2011-09-03
    相关资源
    最近更新 更多