swift - 用于加密/解密时处理更改密码的最佳方法

标签 swift encryption cryptography passwords change-password

<分区>

问题:

我需要加密/解密大量数据。此数据使用密码加密/解密(更具体地说,使用 RNCrytor lib)。应该可以更改此密码。

我的问题是如何才能最有效地做到这一点?

我不太好的解决方案:

除了遍历所有数据并解密之外,肯定有更好的方法。然后使用新密码再次加密。

最佳答案

这是通过添加一个间接层解决的众多问题之一。生成一个随 secret 钥,使用该 key 加密数据,并将该 key 存储在一个文件(或数据库列或其他)中,该文件本身使用从密码派生的 key 加密。

类似于(注意,我不懂 Swift):

// Generation of the data keys
let dek = RNCryptor.randomDataOfLength(RNCryptor.FormatV3.keySize)
let dak = RNCryptor.randomDataOfLength(RNCryptor.FormatV3.keySize)

// Use these to work on the data
let encryptor = RNCryptor.EncryptorV3(encryptionKey: dek, hmacKey: dak)
let decryptor = RNCryptor.DecryptorV3(encryptionKey: dek, hmacKey: dak)

// Save the data keys encrypted with the password
let dek_file = RNCryptor.encryptData(dek, password: password)
let dak_file = RNCryptor.encryptData(dek, password: password)
// Store both dek_file and dak_file somewhere

// Next time, load dek_file and dak_file from where you stored them
let dek = RNCryptor.decryptData(dek_file, password: password)
let dak = RNCryptor.decryptData(dek_file, password: password)

关于swift - 用于加密/解密时处理更改密码的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37213918/

相关文章:

具有加密 URL 的 CodeIgniter

java - 解密文件内容时返回不同的字节

删除指纹时 Android key 失效

mysql - Mysql 中的 Md5 和 Salt

ios - StatusBarStyle 在 iOS 9 上无法正常工作

ios - 如何在单元格部分而不是标题部分设置背景颜色?

swift - 我收到错误 : Use of unresolved identifier 'UINotificationFeedbackGenerator'

iphone - iPhone 上 NSString 的 AES 加密

json - SwiftyJSON/Alamofire 未将字符串解析为 UTF8

java - 在 Node js 中通过 AES/GCM/NoPadding 算法使用 key 和 iv 加密有效负载并在 java 中解密