我可以多次加密一个文件而不会使文件呈指数级增长吗



以下结果导致encrypted:的大小呈指数级增加

let original = 'something'
let passphrase = 'whatever'
let times = 100
let i = 0
let encrypted = CryptoJS.AES.encrypt(original, passphrase).toString()
while (i < times) {
encrypted = CryptoJS.AES.encrypt(encrypted, passphrase).toString()
i++
}

我是否可以使用其他CryptoJS算法/方法/方法来而不是导致指数大小增加?

或者这是不可能的?

注意:如果我不使用toString(),当我尝试重新加密已经加密的内容时,它会中断。我得到了UnhandledPromiseRejectionWarning: RangeError: Invalid array length

运行你的代码会超时。加密字符串显然变得很长,因为它是base64编码的。

我们可以通过加密字阵列而不是base64编码版本的字阵列来减少它的增加量:

let original = 'something'
let passphrase = 'whatever'
let times = 100
let i = 0
let encrypted = CryptoJS.AES.encrypt(original, passphrase).toString()
encrypted = CryptoJS.enc.Base64.parse(encrypted)
while (i < times) {
encrypted = CryptoJS.AES.encrypt(encrypted, passphrase).toString()
i++
encrypted = CryptoJS.enc.Base64.parse(encrypted)
}

http://jsfiddle.net/dwvxua96/

这会运行得很快,并创建一个每次迭代仅增长几个字节的字符串。您可能可以通过设置填充选项或传入key/iv对来减少这种情况,这可能会阻止添加salt参数。

解密看起来像:

i = 0
while (i <= times) {
encrypted = CryptoJS.AES.decrypt(encrypted, passphrase)
encrypted = CryptoJS.enc.Base64.stringify(encrypted);
i++
}

encrypted = CryptoJS.enc.Base64.parse(encrypted);
encrypted = CryptoJS.enc.Utf8.stringify(encrypted)

最新更新