sql - 加密 SQL 中的字符串(可能是 ORACLE PL SQL)。凯撒密码

标签 sql oracle encryption plsql

我需要像凯撒密码这样的东西在我的字符串列中用于每列中的每个值。它应该像 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)

Docs

首先,从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/

相关文章:

mysql - 在 MySQL 或查询生成器中使用 LEFTJOIN 进行 SELECT 和 COUNT

sql - 仅当 rownum = 1 时才使用 while Rownum 从数据库检索

sql select语句提供更多行然后记录在表中

java - 如何使用 jpa 和 hibernate 导入具有多个语句的脚本

ios - 在 cordova 应用程序中实现加密

node.js - 使用 nodejs crypto 与 php 的 mcrypt 解密 blowfish-ecb

sql - MySQL中的简单数学最大值函数

sql - Postgresql 如何结合这两个查询?

.net - Oracle 和 ADO.NET(不推荐使用 System.Data.OracleClient 中的类型。)

encryption - YouTube Live Streaming API加密RTMPS