节省空间的加密/解密?

时间:2018-06-04 20:23:20

标签: encryption cryptography

加密某些数据的最节省空间的方法是什么,以便加密数据满足以下任何一个约束条件:

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() {});
  });
}

2 个答案:

答案 0 :(得分:1)

使用AES-256或Twofish-256您将拥有256位= 32字节。这符合您的第一个要求。两者都节省空间。那么它当然取决于你如何定义“高效”。

答案 1 :(得分:-1)

也许您可以使用散列而不是加密。散列数据并将其存储在服务器上。查找将与存储的哈希冲突的输入数据很难设计。使用输出32字节数据的强哈希算法,你就完成了。