如何解决如何使用protobuf反射来确保确定性序列化
但是,确定性序列化并不是跨语言规范的;它 由于未知而在具有架构更改的不同版本之间也是不稳定的 领域。需要规范序列化的用户,例如永久存储在 规范形式,指纹等应定义自己的形式 规范化规范并使用反射实现序列化器 API,而不是依赖于此API。
我想要实现的是对protobuf消息进行确定性序列化,以随其携带加密签名。据我了解,由于序列化程序的差异,二进制数据可能会有所不同,并且签名将变得无效。
package Something
message Request {
Payload payload = 1;
// signature of serialised payload
bytes signature = 2;
message Payload {
string user_id_from = 1;
uint64 amount = 2;
string user_id_to = 3;
}
}
使用protobuf反射执行此操作的方式是什么?
解决方法
这不能直接回答问题,但可以解决您的问题:不要将有效负载存储为消息,而是将序列化的字节与签名一起存储。
message Request {
// Serialized Payload message.
bytes payload = 1;
// signature of serialised payload
bytes signature = 2;
}
message Payload {
string user_id_from = 1;
uint64 amount = 2;
string user_id_to = 3;
}
这在代码中使用起来可能不太方便,但是具有保留protobuf的所有前向和后向兼容性保证的优点。
它还使您不必在编写消息时将消息序列化两次(一次作为子字段,一次获得签名)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。