【问题标题】:CryptoJS AES Increase File SizeCryptoJS AES 增加文件大小
【发布时间】:2015-07-08 17:10:14
【问题描述】:

感谢您的帮助。

我对 sjcl 库或 cryptojs aes 库有疑问。 每次我用 aes 加密我的文件时,文件大小都是 * 2。 例如:当我上传一个 4mb 的文件时,我的服务器上有一个 8mb 的文件。

我将文件拆分到字节大小可以除以 16 的块上。

请帮帮我

这是我加密文件的方式:

var l_EncryptetData = CryptoJS.AES.encrypt(p_ChunkData, p_FileKey).toString();

这是一个示例数组,其中包含 4mb 文件中的块大小:

0: 1572864
1: 1572864
2: 867005
length: 3

FileKey 是一个 SHA-256 哈希

【问题讨论】:

  • 没有代码我们无法为您提供帮助,但通常 no 这不可能发生。您是否可能以十六进制传输而不将其解码?

标签: encryption aes cryptojs sjcl


【解决方案1】:

您正在将密码输出(CipherParams 对象)转换为字符串。默认情况下,CryptoJS 通过以十六进制表示结果来执行此操作,其中每个字节被编码为两个十六进制数字。您可以通过提供custom format strategy. 来覆盖此行为,或者更好的是,不要将密文转换为字符串;将其保存为二进制数据。

请警告用户您的应用程序不安全。

【讨论】:

  • 那行不通:/ 为什么你觉得这种方法不安全?
  • @Hendrik 什么不起作用?显示您更新的代码并详细说明当前结果。您通过对密码进行一次哈希处理来派生密钥。那不安全。我会冒险猜测还有其他问题。
  • 但是为什么哈希作为 aes 密钥不安全?代码不需要。问题是我使用的每种格式都比原始格式大。 Base64,十六进制。我无法在 latin1 中发送它(服务器上的校验和失败),当我想用​​ utf-8 格式化时,出现错误“UTF-8 数据格式错误”。唯一的好处是我现在知道原因了。但我没有解决方案
  • 请参阅this answer about passwords. 对于 CrypoJS 使用它的PBKDF2 function. 任何文本转换都将比原始数据更长。您有两个选择:不转换为文本,而是将“二进制”数据发送到服务器,或者使用 Base-64 或(更节省空间但更不便携)Base-85 编码来转换为文本。 Base-64 将是原始大小的 133%,Base-85 将是原始大小的 125%。如果您想使用文本,则无法绕过该扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多