Encryption CryptoJS AES增加文件大小

Encryption CryptoJS AES增加文件大小,encryption,aes,cryptojs,sjcl,Encryption,Aes,Cryptojs,Sjcl,谢谢你的帮助 我对sjcl库或cryptojs aes库有问题。 每次我用aes加密文件时,文件大小都是*2。 例如:当我上传一个4mb的文件时,我的服务器上就有一个8mb的文件 我在块上分割文件,其中bytesize可以除以16 请帮帮我 这是我加密文件的方式: var l_EncryptetData = CryptoJS.AES.encrypt(p_ChunkData, p_FileKey).toString(); 这是一个示例数组,其中包含4mb文件中的块大小: 0: 1572864 1

谢谢你的帮助

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

我在块上分割文件,其中bytesize可以除以16

请帮帮我

这是我加密文件的方式:

var l_EncryptetData = CryptoJS.AES.encrypt(p_ChunkData, p_FileKey).toString();
这是一个示例数组,其中包含4mb文件中的块大小:

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

文件密钥是SHA-256散列

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


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

没有代码,我们无法帮助您,但通常不会发生这种情况。你是不是在用十六进制进行传输而没有解码回来?这不起作用:/为什么你觉得这个方法不安全?@Hendrik什么不起作用?显示更新的代码并详细说明当前结果。您正在通过对密码进行一次哈希运算来派生密钥。那不安全。我冒昧地猜测,还有其他问题。但为什么哈希作为aes密钥是不安全的呢?代码不需要。问题是我使用的每种格式都比原始格式大。Base64,十六进制。我不能用拉丁语发送它(服务器上的校验和失败),当我想用utf-8格式化时,会出现一个错误“格式错误的utf-8数据”。唯一积极的是我现在知道原因了。但我没有解决方案,请看CrypoJS的使用,任何文本转换都会比原始数据长。您有两种选择:不转换为文本,而是将“二进制”数据发送到服务器,或者使用Base-64或(更节省空间但便携性较差)Base-85编码转换为文本。Base-64为原始尺寸的133%,Base-85为原始尺寸的125%。如果您想使用文本,就无法绕过该扩展。