Oracle 实现 加密与解密
- 格式:pdf
- 大小:56.86 KB
- 文档页数:2
数据库中数据加密与解密的流程与实现要点数据库中的数据加密与解密是保护数据安全的重要手段之一。
在数据库中存储的数据可能涉及个人隐私、商业机密等敏感信息,如果不采取必要的加密措施,可能会面临数据泄露、篡改或滥用的风险。
因此,对数据库中的数据进行加密与解密是确保数据安全的关键步骤。
数据加密通过对敏感数据进行编码转换,使其变得不可读或不可理解,只有掌握相应的密钥才能进行解密操作。
数据加密可以在数据传输、数据存储以及数据处理等阶段进行,以确保数据的安全性。
下面将介绍数据库中数据加密与解密的流程与实现要点。
首先,数据加密的流程通常分为以下几个步骤:1. 选择适当的加密算法:在数据库中使用的常见加密算法有对称加密和非对称加密。
对称加密使用相同的密钥进行加密和解密,适用于数据传输和数据存储等场景。
非对称加密使用公钥和私钥进行加密和解密,适用于数据的安全交换和数字签名等场景。
根据具体需求选择合适的加密算法和密钥长度。
2. 生成密钥:根据选择的加密算法生成相应的密钥。
对称加密只需生成一个密钥,而非对称加密需要生成一对密钥,包括公钥和私钥。
3. 进行加密操作:使用选定的加密算法和生成的密钥对数据进行加密操作。
对称加密将明文数据和密钥作为输入,输出加密后的密文数据。
非对称加密使用接收方的公钥进行加密,发送方使用接收方的公钥进行数据加密,保证加密数据只能由接收方使用私钥进行解密。
4. 存储密钥:加密后的数据和密钥需要存储在数据库中。
密钥的安全性同样重要,应采取适当的措施保证密钥的安全性,如密钥分离、密钥轮换等。
5. 数据传输与存储:加密后的数据可通过网络传输或存储于数据库中。
在数据传输过程中,对称加密通常使用传输中的密钥进行加密和解密操作,而非对称加密则使用接收方的公钥进行加密。
其次,数据解密的流程通常包含以下步骤:1. 获取密钥:在解密数据之前,首先需要获取相应的密钥。
对称加密使用同一个密钥进行加密和解密,而非对称加密需要使用私钥进行解密。
(原创实用版3篇)编制人员:_______________审核人员:_______________审批人员:_______________编制单位:_______________编制时间:____年___月___日序言下面是本店铺为大家精心编写的3篇《oracle 字段加密解密方法》,供大家借鉴与参考。
下载后,可根据实际需要进行调整和使用,希望能够帮助到大家,谢射!(3篇)《oracle 字段加密解密方法》篇1Oracle 提供了 DBMS_CRYPTO 包来进行字段加密和解密操作。
在使用此包前,需要先创建一个密钥,可以使用 DES、AES 等算法进行加密。
以下是使用 AES 算法进行加密的步骤:1.创建一个密钥:```CREATE OR REPLACE SYSTEM GENERATED ALWAYS AS NEEDED CREDENTIALS DES_KEY;```2.使用密钥进行加密:```SELECT DBMS_CRYPTO.ENCRYPT(平原文本,DES_KEY) FROM 表名;```3.解密加密后的字段:```SELECT DBMS_CRYPTO.DECRYPT(加密后的字段,DES_KEY) FROM 表名;```其中,平原文本是需要加密的字符串,DES_KEY 是加密密钥。
在解密时,需要使用相同的密钥进行解密。
需要注意的是,加密和解密操作都需要使用 sys 用户进行操作,因为该用户拥有足够的权限来使用 DBMS_CRYPTO 包。
《oracle 字段加密解密方法》篇2Oracle 提供了 DBMS_CRYPTO 包来支持字段加密和解密操作。
在使用此包之前,需要先创建一个密钥,可以使用 DBMS_CRYPTO.GENERATE_KEY 函数生成一个随机密钥,也可以使用 DBMS_CRYPTO.HASH_KEY 函数将一个字符串作为输入生成密钥。
对于加密操作,可以使用 DBMS_CRYPTO.ENCRYPT 函数,将明文字符串和密钥作为输入,返回加密后的密文字符串。
数据库中数据加密与解密的流程与实现要点解析及实际应用案例分析分享数据加密与解密是保护数据安全的重要手段,数据库中的数据加密和解密流程及实现要点的解析对于保护敏感信息至关重要。
本文将分析数据库中数据加密与解密的流程和实现要点,并通过一个实际应用案例进行分享。
一、数据库中数据加密与解密的流程在数据库中,数据加密和解密的流程大致可以分为以下几个步骤:1. 确定加密需求:首先要明确要加密的数据对象,是整个数据库还是特定的表、列或字段。
同时也要确定采用哪种加密算法和密钥管理方式。
2. 数据分类和分类加密:根据数据的敏感程度,将数据进行分类。
对于高度敏感的数据,使用较高级别的加密算法和密钥进行加密;对于一般敏感的数据,可以使用适当的加密算法进行加密。
3. 生成密钥和管理密钥:选择合适的密钥生成方式,可以使用对称密钥或非对称密钥。
对称密钥加密的方式简单、高效,但是密钥分发和管理较为复杂;非对称密钥加密的方式较为安全,但是加解密过程相对较慢。
4. 数据加密和解密操作:使用合适的加密算法和密钥对数据进行加密和解密操作。
加密操作将明文数据转化为密文数据,解密操作将密文数据转化为明文数据。
5. 密钥的保护和管理:密钥的保护十分重要,可以采用硬件安全模块(HSM)等方式对密钥进行保护。
同时还需要建立密钥的有效期、权限控制和密钥归档等管理机制。
二、数据库中数据加密与解密的实现要点1. 数据分类和属性选择:根据数据的敏感程度,将数据进行分类。
同时需要选择合适的加密算法和密钥管理方式。
一般敏感的数据可以选择对称加密算法,如AES等;对于高度敏感的数据可以选择非对称加密算法,如RSA等。
2. 密钥生成与管理:根据加密算法的不同,选择合适的密钥生成和管理方式。
对称加密算法中,密钥的生成可以使用随机数生成器;密钥的管理可以使用密钥分发中心(KDC)或密钥管理系统(KMS)。
非对称加密算法中,需要生成公钥和私钥,其中公钥可以发布到公开的地方,私钥需要严格保护。
第一种:数据库表保存密钥我要介绍的是oracle10g的数据加密处理,也就是通常的密码的加密处理,要用到DECRYPT方法对数据解密和ENCRYPT方法加密1.首先通过sys用户登录到oracle数据库,因为我们要通过这个用户来设置一些高级权限grant execute on DBMS_crypto to userName;这句是为了能让用户使用dbms这个方法,能够让我们sql语句种直接简单的调用就可以了,否则我们将无法使用加密和解密,数据库也会报错,不过我忘了是什么错误了,userName就是你通过程序访问数据库时的用户名,2.然后要建立一张表,这张表里就一个字段是用来存放一个key值,这个key值是要在接下来建立的方法种使用到的固定值CREATE TABLE KEYINFOMTBL(KEYCODE RAW(32) NOT NULL,CONSTRAINT KEYINFOMTBL_P PRIMARY KEY (KEYCODE)USING INDEX)/INSERT INTO KEYINFOMTBL V ALUES ( DBMS_CRYPTO.RANDOMBYTES (32) )通过这个两个sql语句建立表,并给表插入一条数据,注意字段的类型是raw型的,这个也是oracle数据库种加密要用的字段类型。
3.就是要建立一个方法,要对数据进行加密处理了,这也是关键的一个部分,我以前在网上看到很多文章来说明这个过程,但试了很多都不好用,我现在给出的例子完全好用,这也是我现在做的项目中使用的CREATE OR REPLACE FUNCTION ENCRYPT(INPUT_STRING V ARCHAR2)RETURN RAWISENCRYPTED_RAW RAW (4000);KEY_BYTES_RAW RAW (32);ENCRYPTION_TYPE PLS_INTEGER :=DBMS_CRYPTO.ENCRYPT_AES256+ DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.PAD_PKCS5;BEGINSELECT KEYCODE INTO KEY_BYTES_RAW FROM KEYINFOMTBL; ENCRYPTED_RAW := DBMS_CRYPTO.ENCRYPT(SRC => UTL_I18N.STRING_TO_RAW (INPUT_STRING, 'AL32UTF8'),TYP => ENCRYPTION_TYPE,KEY => KEY_BYTES_RAW);RETURN ENCRYPTED_RAW;END;这个方法为什么这样写,还要请oracle的高手来说明了,本人也不是很了解啊!嘿嘿4.就是要建立一个解密的方法了,CREATE OR REPLACE FUNCTION DECRYPT(INPUT_RAW RAW)RETURN V ARCHAR2ISOUTPUT_STRING V ARCHAR2(4000);DECRYPTED_RAW RAW (4000);KEY_BYTES_RAW RAW (32);ENCRYPTION_TYPE PLS_INTEGER :=DBMS_CRYPTO.ENCRYPT_AES256+ DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.PAD_PKCS5;BEGINSELECT KEYCODE INTO KEY_BYTES_RAW FROM KEYINFOMTBL;DECRYPTED_RAW := DBMS_CRYPTO.DECRYPT(SRC => INPUT_RAW,TYP => ENCRYPTION_TYPE,KEY => KEY_BYTES_RAW);OUTPUT_STRING := UTL_I18N.RAW_TO_CHAR (DECRYPTED_RAW, 'AL32UTF8');RETURN OUTPUT_STRING;END;/5.我现在要给出一个可以应用这个两个加密和解密的小的例子,可以很明显的看到是如何应用的你可以通过这个sql语句看一下我们在KEYINFOMTBL表种存的那个字段值是什么select UTL_I18N.RAW_TO_CHAR (KEYCODE, 'AL32UTF8') from KEYINFOMTBL;create table testpw(password raw(20))/使用插入的时候只要用ENCRYPT() 就可以将你的字符串加密了insert into testpw values ( ENCRYPT('nvgwngw383$') );你可以通过这个sql语句看到加密以后的数据效果select UTL_I18N.RAW_TO_CHAR (password, 'AL32UTF8') from testpw;通过下面的sql语句就可以将数据进行解密处理select DECRYPT(password) from testpw;第二种:写死密钥1.首先通过sys用户登录到oracle数据库,因为我们要通过这个用户来设置一些高级权限grant execute on DBMS_crypto to userName;这句是为了能让用户使用dbms这个方法,能够让我们sql语句种直接简单的调用就可以了,否则我们将无法使用加密和解密,数据库也会报错,不过我忘了是什么错误了,userName就是你通过程序访问数据库时的用户名2.执行sql,得到keycodeselect DBMS_CRYPTO.RANDOMBYTES(32)from dual3.就是要建立一个方法,要对数据进行加密处理了,这也是关键的一个部分,我以前在网上看到很多文章来说明这个过程,但试了很多都不好用,我现在给出的例子完全好用,这也是我现在做的项目中使用的CREATE OR REPLACE FUNCTION ENCRYPT(INPUT_STRING VARCHAR2)RETURN RAWISENCRYPTED_RAW RAW(4000);KEY_BYTES_RAWRAW(32):='42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B09 4AC4A';--第二步生成的keycode就是替换这里的ENCRYPTION_TYPE PLS_INTEGER:=DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5;BEGINENCRYPTED_RAW :=DBMS_CRYPTO.ENCRYPT(SRC => UTL_I18N.STRING_TO_RAW (INPUT_STRING,'AL32UTF8'),TYP => ENCRYPTION_TYPE,KEY=> KEY_BYTES_RAW);RETURN ENCRYPTED_RAW;END;/这个方法为什么这样写,还要请oracle的高手来说明了,本人也不是很了解啊!嘿嘿4.就是要建立一个解密的方法了,CREATE OR REPLACE FUNCTION DECRYPT(INPUT_RAW RAW)RETURN VARCHAR2ISOUTPUT_STRING VARCHAR2(4000);DECRYPTED_RAW RAW(4000);KEY_BYTES_RAWRAW(32):='42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B09 4AC4A'; --第二步生成的keycode就是替换这里的,与第三步要相同ENCRYPTION_TYPE PLS_INTEGER:=DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5;BEGINDECRYPTED_RAW :=DBMS_CRYPTO.DECRYPT(SRC => INPUT_RAW,TYP => ENCRYPTION_TYPE,KEY=> KEY_BYTES_RAW);OUTPUT_STRING := UTL_I18N.RAW_TO_CHAR (DECRYPTED_RAW,'AL32UTF8');RETURN OUTPUT_STRING;END;/5.我现在要给出一个可以应用这个两个加密和解密的小的例子,可以很明显的看到是如何应用的你可以通过这个sql语句看一下我们在KEYINFOMTBL表种存的那个字段值是什么select UTL_I18N.RAW_TO_CHAR (KEYCODE, 'AL32UTF8') from KEYINFOMTBL;create table testpw(password raw(20))/使用插入的时候只要用ENCRYPT() 就可以将你的字符串加密了insert into testpw values ( ENCRYPT('nvgwngw383$') );你可以通过这个sql语句看到加密以后的数据效果select UTL_I18N.RAW_TO_CHAR (password, 'AL32UTF8') from testpw;通过下面的sql语句就可以将数据进行解密处理select DECRYPT(password) from testpw;第三种: 密钥的保存不管我们用什么样的加密算法,有一点非常重要的是: 密钥的保存.密钥就是一把钥匙,因为加密算法是公开的,所以你无论如何加密,只要我知道你的密钥,我就可以解密,那么你的加密就没有效果.在本文中, 我们的密钥是这样定义的:-KEY_BYTES_RAWRAW(32):='42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B09 4AC4A';42067A1A927255777EB3C7E6317C255B6C7372A1AFB2379A8ECBE6B9B094AC4A就是我们的密钥.所以,如果只是简单地把以上程序在oracle上运行一下就使用,那么任何有权限登陆的人看到这个程序,就可以知道密钥. 所以简单的做法是利用Oracle提供的WRAP把整个程序加密,用加密后的文本创建程序. 这样别人就看不到你的源代码了.把程序保存为source.sql,在Dos命令下输入:-Wrap iname=source.sql oname=target.sql就可以了,然后SQL Plus运行target.sql.当然了, 这里讲的密钥保存还是很简单的. 并不是百分百保险. 大家可以自己想想如何更安全地保持你的密钥.。
oracle解锁数据的方法
在Oracle数据库中,解锁数据的方法取决于锁定的类型和锁定的来源。
下面是一些常见的解锁数据的方法:
1. 手动提交或回滚事务:如果数据被锁定是因为当前事务没有完成,则可以手动提交或回滚事务,以释放锁定的数据。
可以使用以下命令提交事务:
```
COMMIT;
```
或者使用以下命令回滚事务:
```
ROLLBACK;
```
2. 等待其他事务完成:如果数据被其他事务锁定,则可以等待其他事务完成并释放锁定的数据。
3. 杀死会话进程:如果无法等待其他事务完成或无法识别锁定的来源,可以使用以下命令杀死锁定会话进程:
```
ALTER SYSTEM KILL SESSION 'sid, serial#';
```
其中'sid'和'serial#'是锁定会话的标识符,在V$SESSION视图中可以找到。
4. 重启数据库实例:如果数据长时间被锁定或无法解锁,可以考虑重启整个数据库实例来释放锁定的数据。
但是,这种解锁方法应该在其他方法失败后才使用,并且需要小心处理,避免数据丢失或影响其他正在进行的操作。
需要注意的是,解锁数据可能会引起数据一致性问题,必须谨慎使用。
在进行任何解锁操作之前,建议先备份数据以防止意外情况发生。
oracle锁表查询和解锁方法一、锁表查询1.使用“行锁”的“for update”子句“for update”子句可以显式地锁定表中的行,以防止其他用户在数据没有更新之前更改或删除它们。
您可以在SELECT语句后使用“for update”子句来锁定表中的特定行:SELECT empno, enameFROM employeesWHERE deptno = 10FORUPDATE;如果您希望锁定整个表,请加上“OF”关键字:SELECT empno, enameFROM employeesWHERE deptno = 10FOR UPDATE OF empno;当在“of”后面指定列名时,它表示你想要锁定此列中的所有行。
这意味着其他会话只能读取此表,但不能修改任何满足WHERE子句的行。
要确保SQL语句完全执行,您必须提交事务。
2.使用“表锁”的“lock table”您可以使用“lock table”语句来锁定表。
lock table用于管理和表中的数据不受任何其他用户影响的场合。
它有三种锁定模式:共享(shared)、排他(exclusive)和混合(mixed)。
lock table table_name in exclusive mode;通常,你将锁定表以防止其他用户以任何方式更改。
共享模式锁定表并允许其他用户从表中选择数据,而排他模式锁定除了选择以外的所有指令。
为了防止其他会话使用SELECT语句,可以使用混合模式。
混合模式允许其他进程只进行SELECT操作。
要确保锁定表,您可以提交事务或回滚事务:请注意,如果您锁定任何表,您必须确保提交或回滚事务,否则其他会话将无法进行任何操作。
二、解锁表。
oracle数据库加解密方法在Oracle数据库中,可以使用dbms_crypto包进行加解密。
该包提供了多种加密算法和函数,包括DES、3DES(2-key和3-key)、AES、MD5、MD4、SHA-1和SHA-2哈希算法以及MAC(消息认证码)。
以下是在Oracle数据库中使用dbms_crypto包进行加解密的一般步骤:1. 连接到Oracle数据库,并使用sysdba权限登录。
2. 授予普通用户执行dbms_crypto包的权限。
可以使用以下命令:```sqlGRANT EXECUTE ON _CRYPTO TO USER;```3. 创建加密函数。
可以使用以下语法创建一个加密函数:```sqlCREATE OR REPLACE FUNCTION ENCRYPT_FUNCTION(V_STR VARCHAR2, V_KEY VARCHAR2) RETURN RAW ISL_ENC RAW;BEGINL_ENC := DBMS_(V_STR, DBMS__AES256 + DBMS__CBC, V_KEY);RETURN L_ENC;END;```上述函数使用了AES-256算法进行加密,并使用CBC模式和提供的密钥进行加密。
您可以根据需要选择不同的加密算法和参数。
4. 在普通用户中创建同义词。
使用以下命令为加密函数创建一个同义词:```sqlCREATE SYNONYM ENCRYPT_FUNCTION FOR _FUNCTION;```5. 现在普通用户可以使用加密函数来加密和解密数据。
例如,以下是一个示例查询,演示如何使用加密函数对字符串进行加密:```sqlSELECT ENCRYPT_FUNCTION('Hello World', 'MySecretKey') FROM DUAL;```上述查询将返回加密后的字符串。
您可以使用相同的函数和密钥来解密数据。
`DBMS_CRYPTO` 是一个Oracle 数据库中的包(Package),用于提供加密和解密功能。
它包含了一组加密和解密函数,可以用于对数据进行加密、解密、摘要计算等操作。
以下是一些`DBMS_CRYPTO` 中常用的方法:1. `ENCRYPT`: 对数据进行加密。
* 参数:`input_data` - 要加密的数据;`key_name` - 使用的密钥名称;`cipher_type` - 加密算法类型;`iv` - 初始化向量(可选)。
* 返回值:加密后的数据。
2. `DECRYPT`: 对数据进行解密。
* 参数:`input_data` - 要解密的数据;`key_name` - 使用的密钥名称;`cipher_type` - 解密算法类型;`iv` - 初始化向量(可选)。
* 返回值:解密后的数据。
3. `DIGEST`: 对数据进行摘要计算。
* 参数:`input_data` - 要计算摘要的数据;`digest_type` - 摘要算法类型;`key_name` - 使用的密钥名称;`iv` - 初始化向量(可选)。
* 返回值:计算得到的摘要值。
4. `GENERATE_KEY`: 生成密钥。
* 参数:`key_name` - 使用的密钥名称;`key_length` - 密钥长度;`cipher_type` - 加密算法类型;`random_seed` - 随机种子(可选)。
* 返回值:生成的密钥。
5. `ENCRYPT_BY_KEY`: 使用指定的密钥对数据进行加密。
* 参数:`input_data` - 要加密的数据;`key_name` - 使用的密钥名称;`cipher_type` - 加密算法类型;`iv` - 初始化向量(可选)。
* 返回值:加密后的数据。
6. `DECRYPT_BY_KEY`: 使用指定的密钥对数据进行解密。
* 参数:`input_data` - 要解密的数据;`key_name` - 使用的密钥名称;`cipher_type` - 解密算法类型;`iv` - 初始化向量(可选)。
数据库数据加密与解密保护敏感数据的加密与解密方法在现代信息时代,随着互联网的迅猛发展,各类数据库中积累了海量的数据。
然而,这些数据中往往包含了许多敏感信息,比如个人隐私、财务数据等。
为了保护这些敏感数据的安全,数据库加密与解密成为了一项关键技术。
本文将介绍数据库中敏感数据的加密与解密方法,以确保数据的保密性和完整性。
一、对称加密算法对称加密算法是一种常见的加密方法,它使用同样的密钥进行加密和解密。
在数据库中,常见的对称加密算法有DES(Data Encryption Standard)和AES(Advanced Encryption Standard)等。
这些算法通过对数据进行位操作和置换,使得数据变得无法理解。
加密和解密时,需要使用相同的密钥进行操作。
对称加密算法的优点是加密解密速度快,但密钥的安全管理是一个挑战。
二、非对称加密算法非对称加密算法是一种采用不同的密钥进行加密和解密的方法。
在数据库中,常见的非对称加密算法有RSA(Rivest-Shamir-Adleman)和椭圆曲线加密算法(ECC)等。
非对称加密算法既能保证数据加密的安全性,又能方便地进行密钥管理。
在使用非对称加密算法时,数据的发送方使用接收方的公钥进行加密,而接收方则使用自己的私钥进行解密。
三、哈希算法哈希算法是将任意长度的数据映射为固定长度的数据的一种算法。
在数据库中,常见的哈希算法有MD5(Message Digest Algorithm 5)和SHA(Secure Hash Algorithm)等。
哈希算法通常被用于验证数据的完整性,以防止数据被篡改。
在使用哈希算法时,数据经过哈希运算后产生的散列值是唯一的,且同样的数据输入会得到同样的散列值。
这样可以通过比对散列值来确定数据是否被篡改。
四、加密与解密实践实际应用中,数据库数据的加密与解密可以通过数据库管理系统(DBMS)的加密功能来实现。
常见的DBMS,如MySQL、Oracle、SQL Server等都提供了数据加密和解密的功能。
加密算法概述在介绍oracle中的加密算法之前,大家首先要对加密算法有一个大致的了解,懂得为什么加密,如何加密,加密算法的分类。
一,为什么加密我们的系统中会存在一些极其敏感的数据,这些数据涉及到公司的机密。
自然这些是不想让其他公司或竞争对手看到的,所以就需要一种方法来对数据进行“包装”。
包装后的数据就象是增加了一层坚固的外壳,其他人很难看到壳内的敏感数据。
这种“包装”就是加密。
可见加密对于敏感数据的重要意义。
二,如何加密所谓“加密”,就是对原内容为明文的文件或数据按某种算法进行处理,使其成为不可读的代码,经过这样处理的数据通常称为“密文”,密文只能在经过相对应的反向算法处理后才能恢复原来的内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的,而将该编码信息转化为其原来数据的过程,就是“解密”。
最简单的加密就是通过改变明文中的字符位置来实现。
举个简单的例子,比如说welcome这个字符串,我通过交换相邻位置的字符位置来实现最简单的加密。
加密后的字符串变成ewclmoe。
这是简单的加密方式,可以说没有任何的安全性,但是可以说明加密的原理,就是通过一定的处理让明文转变成很难读懂的密文。
现在流行的加密算法是利用一复杂的密钥通过某种加密的算法将明文转化为密文。
既然是进行加密,那么和加密相关的密钥和加密算法自然也是需要保护的。
算法的保密性可以分为基于保持算法的秘密和基于保持密钥的秘密。
如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。
受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。
大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。
如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。
更糟的是,受限制的密码算法不可能进行质量控制或标准化。
每个用户组织必须有他们自己的唯一算法。
这样的组织不可能采用流行的硬件或软件产品。