c++ - 如何在 Miracl 库中进行序列化?
问题描述
有没有办法在 C++ Miracl 库中进行序列化?
通常,在加密世界中,我们会在两个不同的程序中执行加密例程和解密(如 AES,RSA)例程,我希望在这些基于配对的加密中具有相同的结构,例如基于属性的加密和广播加密,即在一个程序中实现加密功能程序和解密在另一个程序中。Miracl repo this和this中有一些示例程序。但他们在一个程序中进行加密、密钥生成和解密。
所以我需要将加密中产生的密码(主要是 G1 和 GT 中的元素,有时是大对象)转储到文件中,然后在解密程序中重新加载,有没有办法做这种工作?Miracl 或其他库中的函数?
更具体地说,我可以将 G1 中的元素保存到 bytes 吗?通过电话
G1 a;
std::cout << sizeof(a) << std::endl;
它超过 40。我可以只保存 40 个字节并重新加载吗?可能吗?
解决方案
在 G1、G2 和 GT 类中有一个构建函数溢出和恢复。您可以使用它们将 G1 溢出到 char* 并使用 char* 恢复 G1。
For example:-
pfc.precomp_for_mult(Q); // precomputation based on fixed point Q
char *bytes;
int len=Q.spill(bytes); // allocates byte array of length len
.. // ..and spills precomputation into it
Q.restore(bytes); // restores Q from byte array (and deletes array)
推荐阅读
- makefile - 如何查看“make”执行的命令?
- jquery - 在滚动时执行此操作,然后在滚动时执行此操作
- android - Android 漏洞导出活动=true
- javascript - 如何在nodejs中将MongoDb ObjectId(“uniqueid”)序列化为JSON?
- python - Keras:valueerror:无法将大小为 4096 的数组重塑为形状(1,64,64,3)
- .net - 无法使用 IBMXMSDotnetClient .NET Core 应用程序连接到 MQ
- android - 如何从系统/上下文/语言环境提供的 DateFormat 中删除年份
- javascript - 选择类别时如何删除课程?
- ios - 在 SwiftUI 中的动画期间文本被缩短
- git - 从生产分支合并到主分支时如何在 Gitlab CI/CD 中增量版本或标记