oracle中的encrypt_des加密对应 Python 的加密方式

本文介绍了Oracle数据库中的加密函数func_encrypt_des_short,以及在Python中使用Cryptodome库实现DES加密和解密的方法,展示了如何使用相同的密钥对123fdfgwsfgwsgrws进行加密和解密操作。
摘要由CSDN通过智能技术生成

 一、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)

 

三、最终的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值