我需要像凯撒密码这样的东西在我的字符串列中用于每列中的每个值。它应该像 n+1 一样: ABcd012Ab -> BCde123Bc
字符串字符可以为空,可以包含分隔符(,-等),可以是大写和小写(没关系)。
最后,它应该被创建为一个过程,然后这个过程应该在 UPDATE 查询中使用。
它可能看起来像这样:
Create procedure text_change(n varchar(1000))
declare @i char
declare @l varchar(100 char)
begin
For each @l in n
For each @i in @l
loop
@i = ????
end loop;
return @l;
end;
UPDATE name_of_table
SET name_of_column = text_change(column)
非常乐意提供任何帮助!
最佳答案
为什么要限制自己使用凯撒密码?您可以使用DBMS_CRYPTO
包,它允许您使用数据加密标准(DES)
首先,从DBA那里获得这个包的执行权限。
SQL> GRANT EXECUTE ON DBMS_CRYPTO TO HR;
Grant succeeded.
然后创建一个像这样的函数。
CREATE OR REPLACE FUNCTION my_encrypt(
p_source VARCHAR2,
p_key VARCHAR2 )
RETURN VARCHAR2
AS
BEGIN
RETURN UTL_RAW.CAST_TO_VARCHAR2 ( DBMS_CRYPTO.encrypt( UTL_RAW.CAST_TO_RAW (p_source),
dbms_crypto.DES_CBC_PKCS5, UTL_RAW.CAST_TO_RAW (p_key) ) );
END;
/
这使用DES_CBC_PKCS5
block 密码套件。
因此,当您运行这样的查询时,您会获得加密的数据。
SQL> SELECT my_encrypt('TREASURE UNDER OAK TREE',
2 'The DBMS_CRYPTO package replaces DBMS_OBFUSCATION_TOOLKIT') AS
3 encrypted
4 FROM dual;
ENCRYPTED
----------------------------
┐↨┐┐♣!┐ o)|┐┐┐┐┐┐┐┐
解密功能
CREATE OR REPLACE FUNCTION my_decrypt ( p_source VARCHAR2, p_key VARCHAR2 )
RETURN VARCHAR2 AS
BEGIN
RETURN UTL_RAW.CAST_TO_VARCHAR2 ( DBMS_CRYPTO.decrypt( UTL_RAW.CAST_TO_RAW (p_source), dbms_crypto.DES_CBC_PKCS5, UTL_RAW.CAST_TO_RAW (p_key) ) );
END;
/
SQL> SELECT my_decrypt( my_encrypt('TREASURE UNDER OAK TREE',
2 'The DBMS_CRYPTO package replaces DBMS_OBFUSCATION_TOOLKIT') ,
3 'The DBMS_CRYPTO package replaces DBMS_OBFUSCATION_TOOLKIT') AS
4 decrypted
5 FROM dual;
DECRYPTED
---------------------------------
TREASURE UNDER OAK TREE
您还可以使用它来加密和解密表中的列。
update yourtable set SOMETEXT =
my_encrypt(SOMETEXT,'The DBMS_CRYPTO package replaces DBMS_OBFUSCATION_TOOLKIT');
update yourtable set SOMETEXT =
my_decrypt(SOMETEXT,'The DBMS_CRYPTO package replaces DBMS_OBFUSCATION_TOOLKIT');
关于sql - 加密 SQL 中的字符串(可能是 ORACLE PL SQL)。凯撒密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50044228/