gpt4 book ai didi

java - AES256 的 Oracle DBMS_CRYPTO.ENCRYPT 初始化 vector 长度

转载 作者:行者123 更新时间:2023-12-04 06:06:57 25 4
gpt4 key购买 nike

使用 DBMS_CRYPTO.ENCRYPT 过程时,初始化 vector 是否有最小/最大长度?我收到以下错误:

ORA-28817: PL/SQL function returned an error.
ORA-06512: at "SYS.DBMS_CRYPTO_FFI", line 3
ORA-06512: at "SYS.DBMS_CRYPTO", line 13
ORA-06512: at "Test_Encryption", line 14
ORA-06512: at line 3

产生这个错误的代码如下:
raw_encrypted_token := DBMS_CRYPTO.ENCRYPT( src => UTL_I18N.STRING_TO_RAW( input_token, 'AL32UTF8' ),
typ => encryption_type,
key => key_raw_form,
iv => hextoraw('0123456789ABCDEF') );

当我将 key 从 16 字节更改为 32 字节时,我没有任何问题。但是,我正在尝试使用 Cipher 对象在 Java 中进行解码,并且初始化 vector 的长度只能为 16 个字节。关于如何解决 pl/sql 中的初始化 vector 问题的任何建议?

最佳答案

对于大多数块密码操作模式,初始化 vector 的长度应与块大小相同。对于 AES,这是 128 位 = 16 字节。

你的代码

hextoraw('0123456789ABCDEF')

实际上产生一个 16·4=64 位值,因为每个十六进制数字对应 4 位,而不是 8 位字节。
因此 32 位十六进制数字字符串是 128 位初始化 vector 的正确长度。

另一方面,如果您对每条记录使用相同的键,则不应使用硬编码的初始化 vector 。出于安全目的,每条记录都应使用其自己的初始化 vector 进行加密 - 最好是随机的,尽管取决于操作模式(即 CTR),唯一的可能就足够了(如果在连续记录之间留出一些空间)。

关于java - AES256 的 Oracle DBMS_CRYPTO.ENCRYPT 初始化 vector 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8247788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com