为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:8 【操作系统】:windows10 【CPU】: 【问题描述】:使用透明加密SM4对表列字段(BLOB类型)加密,如何校验解密后的数据是正确的,解密后如何与原数据做比较,检验加解密的正确性?
说个想法,你看看是否能派上用场。
首先,有个原始数据表,这个表中数据保留不动。 比如我这里测试的表,其中IMG字段是BLOB类型,不加密处理。
CREATE TABLE T_IMGTST_SOUR ( VER VARCHAR2(128), FNAME VARCHAR2(128), IMG BLOB );
然后,创建一个字段透明加密的表,比如
CREATE TABLE T_IMGTST_SM4 ( VER VARCHAR2(128), FNAME VARCHAR2(128), IMG BLOB ENCRYPT WITH SM4_ECB );
然后将原始表中数据复制到加密存储表中,类似于
INSERT INTO T_IMGTST_SM4 SELECT * FROM T_IMGTST_SOUR COMMIT;
后面就可以将两表根据关联起来,使用BLOB_EQUAL函数来校验两表中IMG字段内容是否一致。
SELECT BLOB_EQUAL(A.IMG,B.IMG) FROM T_IMGTST_SOUR A ,T_IMGTST_SM4 B WHERE A.FNAME = B.FNAME
因为是透明加密,所以对查询过程,加密存储表中IMG字段内容也是明文状态,如果与原表字段一致,则BLOB_EQUAL函数返回1。
对于透明加密字段,如果要验证字段内容是否是真正采用加密存储方式,则需要使用 V$BTREE_INDEX_PAGES、V$LOB_SEG 等系统表获取原表和加密表对应相同记录IMG字段所在LOB页号,使用uedit等工具直接查看dbf文件对应偏移位置内容。
例如我测试的情况,原表IMG中某记录数据
加密表中对应记录数据内容
说个想法,你看看是否能派上用场。
首先,有个原始数据表,这个表中数据保留不动。
比如我这里测试的表,其中IMG字段是BLOB类型,不加密处理。
CREATE TABLE T_IMGTST_SOUR ( VER VARCHAR2(128), FNAME VARCHAR2(128), IMG BLOB );
然后,创建一个字段透明加密的表,比如
CREATE TABLE T_IMGTST_SM4 ( VER VARCHAR2(128), FNAME VARCHAR2(128), IMG BLOB ENCRYPT WITH SM4_ECB );
然后将原始表中数据复制到加密存储表中,类似于
INSERT INTO T_IMGTST_SM4 SELECT * FROM T_IMGTST_SOUR COMMIT;
后面就可以将两表根据关联起来,使用BLOB_EQUAL函数来校验两表中IMG字段内容是否一致。
SELECT BLOB_EQUAL(A.IMG,B.IMG) FROM T_IMGTST_SOUR A ,T_IMGTST_SM4 B WHERE A.FNAME = B.FNAME
因为是透明加密,所以对查询过程,加密存储表中IMG字段内容也是明文状态,如果与原表字段一致,则BLOB_EQUAL函数返回1。
对于透明加密字段,如果要验证字段内容是否是真正采用加密存储方式,则需要使用 V$BTREE_INDEX_PAGES、V$LOB_SEG 等系统表获取原表和加密表对应相同记录IMG字段所在LOB页号,使用uedit等工具直接查看dbf文件对应偏移位置内容。
例如我测试的情况,原表IMG中某记录数据

加密表中对应记录数据内容
