加密某些数据的最节省空间的方法是什么,以便加密数据满足以下任何一个约束条件:
1)符合32个字节或更少的十六进制(64个字符)
2)符合28个字节或更少的utf-8个字符(28个字符)
3)适合64位无符号整数
目标是加密一些数据(如用户ID + nonce)并将其公开存储在区块链中,然后在服务器上解密。区块链的存储要求我使用(Stellar memos - https://www.stellar.org/developers/guides/concepts/transactions.html#memo)。
我正在寻找节省空间的加密算法,或加密+无损压缩的某种组合,以使其适合。
将有两个加密输入:用户ID和nonce - 让我们假设我们可以容纳25个字符。
示例:
function EditCTF() {
//$("#fields").css({ display: "" });
Word.run(function(context) {
context.document.properties.title = $("#Title").val();
Office.context.document.customXmlParts.getByNamespaceAsync(
"http://schemas.microsoft.com/office/2006/metadata/properties",
function(asyncResult) {
if (asyncResult.value.length > 0) {
var xmlPart = asyncResult.value[0];
xmlPart.getNodesAsync("*/*", function(nodeResults) {
console.log(nodeResults.value.length);
for (i = 0; i < nodeResults.value.length; i++) {
var node = nodeResults.value[i];
node.getTextAsync({ asyncContext: "StateNormal" }, function(result) {
console.log(result);
console.log(result.value);
});
console.log("NewValue");
if (node.baseName == "Address") {
node.setTextAsync(
$("#Address").val(),
{
asyncContext: "StateNormal"
},
function(newresult) {}
);
}
if (node.baseName == "MainContactPerson") {
node.setTextAsync(
$("#Main Contact Person").val(),
{
asyncContext: "StateNormal"
},
function(newresult) {}
);
}
if (node.baseName == "GDPR") {
node.setTextAsync(
"true",
{
asyncContext: "StateNormal"
},
function(newresult) {
console.log(newresult);
console.log(newresult.value);
}
);
}
}
});
}
}
);
return context.sync().then(function() {});
});
}
答案 0 :(得分:1)
使用AES-256或Twofish-256您将拥有256位= 32字节。这符合您的第一个要求。两者都节省空间。那么它当然取决于你如何定义“高效”。
答案 1 :(得分:-1)
也许您可以使用散列而不是加密。散列数据并将其存储在服务器上。查找将与存储的哈希冲突的输入数据很难设计。使用输出32字节数据的强哈希算法,你就完成了。