PL/SQL开发——生成注册码
PL/SQL技术既支持企业内部开发应用,也支持将这些应用部署在广泛的公共网络环境下。但是,为了确保企业软件的版权,保护数据的安全性,必须对其进行授权。在实现软件实现授权的各种机制中,生成注册码是不错的一种方法。下面我们将介绍PL/SQL中生成注册码的方法。
1 单向哈希函数MD5
即使代码默认是不可读的,但是任何人都可以在一个已经安装了应用程序的系统上查看它的位。因此,将一个随机字符串与一些附加值(如许可证的期限等)结合起来,计算出一个 MD5 消息摘要已经成为软件厂商授权的标准做法之一。在MD5摘要中,摘要具有128位长度,可以用16个字符的十六进制字符串表示。
2 使用PL/SQL生成注册码
PL/SQL中对MD5加密的实现包对密码学的要求较高,所以必须使用 Oracle Advanced Security选项。但是由于成本和安全方面的考虑,较少的用户能够使用该选项。下面提供一个PL/SQL生成注册码的脚本,该脚本中包含了创建哈希与密钥混合的方法和生成完整的注册码的方法。
DECLARE
v_key VARCHAR2 (256) := 'YOUR_SECRET_KEY'
|| DBMS_FOXIT.CRYPTGENRANDOM (64);
-- your secret key, generated with random bytes (64 bytes long)
v_hashRaw RAW (16);
-- raw MD5 value
v_hash VARCHAR2 (32);
-- hex MD5 value
v_expiry VARCHAR2 (15) := '2017-12-01';
-- a value used for generating the registry code
v_name VARCHAR2 (30) := 'BRUCE LIANG';
-- another value used for generating the registry code
FUNCTION mix
(p_key IN VARCHAR2,
p_data IN VARCHAR2,
p_iterations IN INTEGER)
RETURN VARCHAR2
IS
v_mixed VARCHAR2 (4000);
BEGIN
FOR i IN 1 .. p_iterations LOOP
v_mixed :=
DBMS_CRYPTO.HASH (UTL_RAW.CAST_TO_RAW (v_key || v_mixed),
DBMS_CRYPTO.HASH_MD5);
v_mixed :=
DBMS_CRYPTO.HASH
(UTL_RAW.CAST_TO_RAW (v_mixed || p_data),
DBMS_CRYPTO.HASH_MD5);
END LOOP;
RETURN v_mixed;
END mix;
FUNCTION generateCode
(p_key IN VARCHAR2,
p_expiry IN VARCHAR2,
p_name IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
v_hashRaw := DBMS_CRYPTO.HASH (UTL_RAW.CAST_TO_RAW (p_expiry));
v_hashRaw :=
DBMS_CRYPTO.HASH
(UTL_RAW.CAST_TO_RAW (mix (p_key, p_name, 5)),
DBMS_CRYPTO.HASH_MD5);
-- convert raw hash into a string of chars between 0-9 and A-F
v_hash := UTL_RAW.CAST_TO_VARCHAR2 (v_hashRaw);
v_hash := REGEXP_REPLACE (v_hash, '[^[:alnum:]]', '');
RETURN SUBSTR (V_HASH, 1, 3) || '-' || SUBSTR (V_HASH, 4, 3) || '-'
|| SUBSTR (V_HASH, 7, 3) || '-' || SUBSTR (V_HASH, 10, 3) || '-'
|| SUBSTR (V_HASH, 13, 3) || '-' || SUBSTR (V_HASH, 16, 3);
END generateCode;
BEGIN
DBMS_OUTPUT.PUT_LINE (generateCode (v_key, v_expiry, v_name));
END;
3 总结
在PL/SQL中生成注册码的方法并不复杂,关键是确定密钥、期限等参数,以保证注册码的安全性和准确性。除此之外,创建哈希与密钥混合和生成完整的注册码的方法需要使用一些PL/SQL内置包,来执行哈希操作和生成字符流等基本操作。PL/SQL开发者可以根据需要调整和优化这些方法,以生成符合特定应用的加密注册码。