一、oracle中的加密函数func_encrypt_des_short
CREATE OR REPLACE FUNCTION func_encrypt_des_short(p_text VARCHAR2) RETURN VARCHAR2 IS
v_text VARCHAR2(4000);
v_enc VARCHAR2(4000);
v_key VARCHAR2(20);
raw_input RAW(512);
key_input RAW(512);
decrypted_raw RAW(2048);
BEGIN
v_key := 'aswdferty';
v_text := rpad(p_text, (trunc(length(p_text) / 8) + 1) * 8, chr(0));
dbms_output.put_line(v_key);
raw_input := utl_raw.cast_to_raw(v_text);
key_input := utl_raw.cast_to_raw(v_key);
dbms_obfuscation_toolkit.desencrypt(input => raw_input,
key => key_input,
encrypted_data => decrypted_raw);
v_enc := rawtohex(decrypted_raw);
RETURN v_enc;
END;
下图是加密后的结果
将123fdfgwsfgwsgrws加密后的密文是 370FB275D0A68A7423801D8DE7B5F26AD8A23894439D76C0
二、python中对应的加密、解密方法
from Cryptodome.Cipher import DES
def des_encrypt(plain_text, key):
key = key[:8].encode()
plain_text = plain_text.encode()
cipher = DES.new(key, DES.MODE_CBC, IV=bytes([0] * 8))
padded_data = plain_text.ljust(8 * ((len(plain_text) + 7) // 8), b'\0')
enBytes = cipher.encrypt(padded_data)
hexStr = enBytes.hex().upper()
return hexStr
def des_decrypt(encrypted_text, key):
key = key[:8].encode()
cipher = DES.new(key, DES.MODE_CBC, IV=bytes([0] * 8))
enBytes = bytes.fromhex(encrypted_text)
decrypted_data = cipher.decrypt(enBytes)
decrypted_text = decrypted_data.decode('utf-8').strip(b'\0'.decode('utf-8'))
return decrypted_text
if __name__ == '__main__':
key = 'aswdferty'
plain_text = '123fdfgwsfgwsgrws'
encrypted_text = des_encrypt(plain_text, key)
print('加密后的文本:', encrypted_text)
decrypted_text = des_decrypt(encrypted_text, key)
print('解密后的文本:', decrypted_text)