为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8企业版
【操作系统】:centOs7
【CPU】:
【问题描述】*:
java侧以下方式加密:
SecretKey key = new SecretKeySpec(KEY.getBytes("GBK"), "SM4");
Cipher cipher = Cipher.getInstance("SM4/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal("123".getBytes());
System.out.println(Hex.toHexString(encrypted).toUpperCase());
输出:E53238720ACBBF821E6C0B08AB7E0BAF
DM数据库侧:
SELECT
SF_ENCRYPT_BINARY(
'123',
5201,
'F3B361FD6CA6DE0C',
NULL
)
FROM DUAL;
输出转换为HEX:0D3536DB87FC1B92EDABD607C31EDC74
如何解决?请大神指导,只能通过外部jar的方式了吗?

目前最新放开下载的26S1版本DM8,里面增加了一对解密函数 SF_ENCRYPT_VARBINARY2/SF_DECRYPT_VARBINARY2
这两个函数使用了标准的加解密算法,你如果也使用的最新版本,可以测试下看看是否能满足需要。
我手头环境的ID_CODE:--03134284552-20260414-322369-20221
测试情况:
--SM4加密 SELECT TO_CHAR(SF_ENCRYPT_VARBINARY2(65,CONVERT_TO_UTF8(CHARTOBIN('123'),10),CHARTOBIN('F3B361FD6CA6DE0C'),NULL)); --返回:E53238720ACBBF821E6C0B08AB7E0BAF --SM4解密 SELECT BINTOCHAR(SF_DECRYPT_VARBINARY2(65,0xE53238720ACBBF821E6C0B08AB7E0BAF,CHARTOBIN('F3B361FD6CA6DE0C'),NULL)); --返回:123