Сложность взлома шифра больше зависит от используемого алгоритма, чем от длины пароля.(опуская атаки брут-форс)
Расширение ключа не повышает безопасность, потому что у вас все еще есть тот же короткий пароль в начале.Для вашей безопасности сразу предположите, что у вас был взлом и код приложения был утек.То есть все стандартные и пользовательские алгоритмы являются общедоступными.
И вам все равно придется использовать расширение пароля, поскольку большинству алгоритмов требуется секрет определенной длины.
Более ранний ответ, немного не по теме.
TL; DR: лучший способ - обработать пароль в двоичном буфере (строке).
Симметричное шифрование точно основано на фактечто, имея секрет, вы можете выполнить обратную операцию. Симметричный означает, что операции обратимы.
Ваш язык программирования, инфраструктура или библиотека не имеют значения.
Некоторые различия находятся на этапе упаковки зашифрованного сообщения.Вы можете получить необработанное сообщение или красиво отформатированное сообщение, в котором вы добавили IV и содержимое в base64.
Вам также необходимо обработать ключ таким же образом.Но речь идет о кодировании big endian
и little endian
и кодировке символов, например: utf-8
, latin2
IV
- это дополнительная защита, направленная на создание разных зашифрованных сообщений для одного и того же входящего сообщения и секрета.,Но, как написано в последнем абзаце раздела, на который вы нацелены:
Они не должны быть секретными: IV обычно просто добавляются в незашифрованные сообщения зашифрованного текста.
В итоге: вам не нужно влиять на сам процесс шифрования, и вам нужно проверить, какие данные нужны Electron.
Например, моя процедура дешифрования (в узле, данные из PHP):
let crypto = {
key: Buffer.from('secret in hex', 'hex'),
cipher: 'aes-128-cbc',
iv_size: 16
}
let bData = Buffer.from(data.replace(/ /g,'+'), 'base64');
let iv = bData.slice(0, crypto.iv_size);
let text = bData.slice(crypto.iv_size);
var decipher = crypt.createDecipheriv(crypto.cipher, crypto.key, iv);
decipher.setAutoPadding(false);
var decrypted = decipher.update(text,'hex','hex');
decrypted += decipher.final('hex');
Для шифрования PHP:
$data = mcrypt_encrypt($this->_cipher, $this->_key, $data, $this->_mode, $iv);
// Use base64 encoding to convert to a string
return base64_encode($iv.$data);
//where
array(
'key'=> urldecode('secret in urlencode'),
'cipher' => MCRYPT_RIJNDAEL_128,
'mode' => MCRYPT_MODE_CBC,
),
Как видите, мне пришлось найти алгоритмы шифрования, реализованные на обеих платформах, и предоставить способ предоставления идентичного ключа на обеих платформах.