我可以在文件不呈指数增长的情况下多次加密文件吗?
Can I encrypt a file multiple times without an exponential file increase?
以下导致 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 algorithm/method/approach 不会 导致大小呈指数增长?
或者这是不可能的?
注意: 如果我不使用 toString()
它会在我尝试重新加密已经加密的内容时中断。我得到一个 UnhandledPromiseRejectionWarning: RangeError: Invalid array length
.
运行 你的代码对我来说会超时。加密字符串显然变得很长,因为它是 base64 编码的。
我们可以通过加密 wordarray 而不是 base64 编码版本的 wordarray 来减少它增加的数量:
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)
}
这运行速度很快,创建的字符串每次迭代仅增长几个字节。您可以通过设置填充选项或传入 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)
以下导致 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 algorithm/method/approach 不会 导致大小呈指数增长?
或者这是不可能的?
注意: 如果我不使用 toString()
它会在我尝试重新加密已经加密的内容时中断。我得到一个 UnhandledPromiseRejectionWarning: RangeError: Invalid array length
.
运行 你的代码对我来说会超时。加密字符串显然变得很长,因为它是 base64 编码的。
我们可以通过加密 wordarray 而不是 base64 编码版本的 wordarray 来减少它增加的数量:
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)
}
这运行速度很快,创建的字符串每次迭代仅增长几个字节。您可以通过设置填充选项或传入 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)