使用同一文件的校验和加密文件

Posted

技术标签:

【中文标题】使用同一文件的校验和加密文件【英文标题】:Encrypting file with checksum of the same file 【发布时间】:2014-03-30 11:55:11 【问题描述】:

使用 AES-256-CBC 之类的密码以及将同一文件的校验和用作密钥来加密文件的安全性如何?这是有风险的,还是安全的?

像这样的步骤:

    生成文件的校验和 使用文件校验和加密文件 在服务器或磁盘上保存加密文件 使用 RSA/ECC 公钥加密校验和 在服务器或磁盘上保存加密校验和

解密:

    使用 RSA/ECC 私钥解密校验和 使用校验和解密文件

我的想法安全吗?

【问题讨论】:

为什么要计算校验和而不是随机密钥?我怀疑在某些情况下,例如使用校验和包含大量零的文件可以生成可预测的密钥 好吧,我有理由这样做。但我不知道这样做是否安全.. 这最好在crypto.stackexchange.com上问 这被称为“收敛加密”,最近也被称为“消息锁定加密”。我们在 crypto.se 上有一个相关问题:Is Convergent Encryption really secure? 这正是我要找的……谢谢! 【参考方案1】:

CodesInChaos 用 URL 回答了我的问题。我想将您重定向到:

https://crypto.stackexchange.com/questions/729/is-convergent-encryption-really-secure https://security.stackexchange.com/questions/7142/online-backup-how-could-encryption-and-de-duplication-be-compatible

【讨论】:

如果您对自己的回答感到满意,请接受(您现在应该可以接受了),这样寻找未回答问题的人就不会在他们的搜索结果中找到您的问题。对您的答案的一些反馈:最好不仅包含链接,还包含实际答案,即使它可能很短。有关更多解释,请参阅此问题:meta.stackexchange.com/questions/8231/…【参考方案2】:

将文件加密为校验和或多或少是容易的;你可以使用像 cripto-js 这样的库

npm install cripto-js

如果你使用打字稿

npm install @types/criptojs

在您已经安装此库之后,您必须将文件(图像)转换为 MD5,然后将 STRING 生成的 MD5 转换为 base64。

你可以运行一些:

new Promise((resolve, reject) => 
  const reader = new FileReader();
  reader.readAsDataURL(file);
  reader.onload = (event: any) => 
    let binari = event.target.result;
    let md5 = criptoJS.MD5(binari).toString();
    const encodedWord = criptoJS.enc.Utf8.parse(md5);
    const encoded = criptoJS.enc.Base64.stringify(encodedWord);
    resolve(reader.result);
  ;
  reader.onerror = error => reject(error);
);

是的,我正在运行打字稿。

我希望这对你有用。 :) 快乐编码

【讨论】:

以上是关于使用同一文件的校验和加密文件的主要内容,如果未能解决你的问题,请参考以下文章

md5校验工具是干啥用的?

hashlib 文件校验,MD5动态加盐返回加密后字符

MD5工具类,提供字符串MD5加密文件MD5值获取(校验)功能

什么是校验和?

压缩文件系统和加密文件系统

GIT的使用2