如何在不使用IV(初始化向量)的情况下使用密码

问题描述 投票:0回答:1

我正在尝试加密/解密一些字符串数据。我使用密码。我一直在想是否有必要使用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)
android security kotlin encryption
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.