如何在没有 IV(初始化向量)的情况下使用 Cipher

森雅奥哈尔

我正在尝试加密/解密一些字符串数据。我使用密码。我一直在想是否有必要使用 IV 来加密数据。如果您可以在没有 IV 的情况下使用 Cipher,那么该怎么做呢?

我在这里得到了一些代码:这是加密数据的代码:

fun encrypt(cipher: Cipher, plainText: ByteArray): String {
    val enc = cipher.doFinal(plainText)
    return Base64.encodeToString(
            enc,
            Base64.DEFAULT
    ) + separator + Base64.encodeToString(
            cipher.iv,
            Base64.DEFAULT
    )


}

这是解密代码:

fun decrypt(cipher: Cipher, encrypted: String): String {

    return cipher.doFinal(
            Base64.decode(
                    encrypted,
                    Base64.DEFAULT
            )
    ).toString(Charsets.UTF_8)
}

解密的初始化:

cipherDec.init(
                Cipher.DECRYPT_MODE, key, IvParameterSpec(
                    Base64.decode(
                        IV.toByteArray(Charsets.UTF_8),
                        Base64.DEFAULT
                    )
                )

加密初始化:

 cipherEnc.init(Cipher.ENCRYPT_MODE, key)
马雷克·普哈尔斯基

首先,您不能简单地不使用 IV(初始化向量),因为在更强模式下工作的密码总是被设计为需要一个。IV的目的是为相同的明文生成不同的密文。通常的做法是使用强随机数生成器根据需要获取尽可能多的IV字节,然后将IV附加到密文(通常在其前面),然后使用IV进行解密。是的,IV 不需要加密或隐藏。它只需要在那里。

那么,如果您不想要或不需要 IV(如果每个明文因明文域或业务需要而不同,您可能不需要 IV)怎么办?您可以为 IV 使用常量值(如零字节数组)。那么您就不需要将 IV 附加到密文中。但请注意 -除非您确切地知道自己在做什么,否则不要这样做改用随机 IV。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在没有初始化程序的情况下使用 TopLevel 对象?

如何在没有初始化的情况下声明变量

如何在没有时间的情况下初始化随机

如何在没有登录按钮的情况下初始化Google登录?

如何在没有代码重复的情况下初始化映射?

如何在没有用户交互的情况下初始化全屏

如何在Laravel上没有get()的情况下初始化模型

如何在不使用现有Cookie的情况下初始化WKWebView

如何在没有空终止符的情况下初始化char数组?

jQuery UI对话框:如何在没有标题栏的情况下初始化?

如何在不使用'href'属性的情况下初始化jQuery UI Tabs?

如何在不使用python初始化的情况下获取类对象的属性类型

如何在Java中不初始化的情况下使用数组

如何在SwiftUI中不使用某些View {}的情况下初始化View?

在WPF应用程序中如何在没有主类的情况下初始化数据库(使用Entity Framework进行代码优先)

在没有初始化的情况下进行结构初始化时的Swift初始化属性

如何确保在没有构造函数的情况下正确初始化对象?

没有构造函数的情况下,对象初始化如何发生?

如何在不使用常量数组大小的情况下初始化私有类中的数组?

初始化对象的最佳方式,可以由所有JUnit测试的情况下使用

如何在不使用匿名对象的情况下初始化列表初始值设定项中的对象?

如何在没有初始化程序的情况下在 formGroup 中设置子 formGroup?

可以使用缓存在没有 Internet 连接的情况下 react-native 初始化项目吗?

Swift用参数初始化类然后在没有参数的情况下初始化它

TypeScript:如何在不使用明确赋值断言的情况下使用 setter 初始化类的成员?

如何在不使用gcloud auth登录创建的凭据文件的情况下初始化GoogleCredentials对象

如何在不修改 vue 3 中的道具的情况下使用道具初始化状态

如何在不使用Python初始化新类的情况下编辑继承类的属性?

使用 (MaterializeCSS),如何在不冻结浏览器的情况下初始化 Picker 组件?