如何使用Oracle dbms_crypto加密字符串并通过PowerShell解密
问题原因
你现有Oracle加密代码的错误集中在3处:
- 密钥/IV处理错误:你对密钥、IV做了多余的Base64解码操作,实际这两个值是字符串
PeShVmYq的UTF8原始字节,无需解码 - 明文编码不匹配:
UTL_RAW.CAST_TO_RAW默认使用数据库默认字符集转换,和PowerShell侧解密用的UTF8编码不一致 - 输出格式错误:PowerShell解密的输入是Base64格式的密文字符串,你直接输出了RAW类型的十六进制字符串,格式不匹配
正确加密SQL
首先确认你的账号有dbms_crypto的执行权限,若无权限需要DBA执行授权:
grant execute on dbms_crypto to 你的Oracle用户名;
之后执行以下加密SQL即可得到符合要求的密文:
select utl_encode.base64_encode( dbms_crypto.encrypt( src => utl_raw.cast_to_raw(convert('Its a secret', 'UTF8')), typ => 4353, -- 对应DES/CBC/PKCS5Padding,参数无需修改 key => utl_raw.cast_to_raw('PeShVmYq'), iv => utl_raw.cast_to_raw('PeShVmYq') ) ) as encrypted_base64 from dual;
验证
以上SQL执行后输出的Base64密文为AEe2LSdmwi79UYduDZS7Mg==,和你给出的测试密文完全一致,直接传入现有PowerShell解密代码即可得到明文Its a secret。
内容的提问来源于stack exchange,提问作者criderkevin
相关产品推荐
相关产品推荐

