我正在尝试创建一个简单的Kotlin对象,该对象通过在保存之前对内容进行加密来包装对应用程序共享首选项的访问。
加密似乎可以正常工作,但是当我尝试解密时,我收到一个javax.crypto.AEADBadTagException,它从“ android.security.KeyStoreException:签名/ MAC验证失败”触发。
我尝试调试以查看潜在的问题是什么,但找不到任何东西。没有任何搜索给我任何线索,我似乎遵循了这封信的一些指南,但没有成功。
private val context: Context?
get() = this.application?.applicationContext
private var application: Application? = null
private val transformation = "AES/GCM/NoPadding"
private val androidKeyStore = "AndroidKeyStore"
private val ivPrefix = "_iv"
private val keyStore by lazy { this.createKeyStore() }
private fun createKeyStore(): KeyStore {
val keyStore = KeyStore.getInstance(this.androidKeyStore)
keyStore.load(null)
return keyStore
}
private fun createSecretKey(alias: String): SecretKey {
val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, this.androidKeyStore)
keyGenerator.init(
KeyGenParameterSpec.Builder(alias, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build()
)
return keyGenerator.generateKey()
}
private fun getSecretKey(alias: …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 iOS 11 的拖放功能集成到 Xcode 9 beta 的应用程序中。我对创建一个标准日历应用程序可以理解的 NSItemProvider 很感兴趣。我的拖动从 UITableView 开始,因此只实现了一个 dragDelegate 方法。
到目前为止,我已经尝试了以下方法:
let text = "Rendez-vous at \(clientName)"
let data = text.data(using: .utf8)
let itemProvider = NSItemProvider()
itemProvider.registerDataRepresentation(forTypeIdentifier: kUTTypeCalendarEvent as String, visibility: .all) { completion in
completion(data, nil)
return nil
}
let dragItem = UIDragItem(itemProvider: itemProvider)
Run Code Online (Sandbox Code Playgroud)
并且还尝试使用类型标识符 kUTTypePlainText。不走运,日历应用程序不会注册下降。
我找不到任何关于此的官方文档。我希望日历应用程序正在寻找一些标准日历数据,这不仅限于标准应用程序相互通信。例如,您可以将笔记应用程序中的文本拖放到日历中以创建事件。
有谁知道我可以尝试什么?
提前致谢。