Я использую RNEncryptor
и RNDecryptor
классы для шифрования и дешифрования следующим образом:Стратегия создания и сохранения пароля для шифрования и дешифрования
NSData *encryptedData = [RNEncryptor encryptData:input
withSettings:kRNCryptorAES256Settings
password:thePassword
error:nil];
NSData *output = [RNDecryptor decryptData:encryptedData
withSettings:kRNCryptorAES256Settings
password:thePassword
error:nil];
В первый раз я должен зашифровать данные в моем приложении я генерировать пароль, используя RNCryptor
класс следующим образом:
NSData *thePasswordData = [RNCryptor randomDataOfLength:32];
NSString *thePassword = [aesPasswordData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
я сохранить этот сгенерированный пароль в Keychain в приложения и использовать его для всего последующего шифрования и дешифрования.
Является ли это хорошей стратегией для шифрования/дешифрования или может ли кто-нибудь увидеть какие-либо недостатки? Должен ли я вместо этого генерировать ключ AES и хранить его в Keychain и работать с этим, а не с паролем?
Edit: Я изменил выше, как сгенерировать пароль с помощью NSProcessInfo
класс, используя RNCryptor
класс, основанный на ответ Роб Непера. В остальном мне все еще интересно узнать, правильна ли и правильна ли стратегия в целом по работе с паролем, а не с ключом AES.
'globallyUniqueString' или' NSUUID' в порядке, но ничто не сравнится с запросом пользователя на хороший пароль. – Wain
Спасибо за ответ Wain. Мне нужно, чтобы это произошло беспрепятственно ... без взаимодействия с пользователем. Поэтому я должен создать случайную строку. –
@Wain Но как можно доверять пользователю, чтобы предоставить хороший пароль? «Passw0rd» пройдет большинство тестов, 8 символов, по крайней мере одна прописная буква и одно число еще далеко от хорошего пароля. – zaph