Oracle で password という文字列を、秘密鍵 'key12345' で DES で暗号化してみます。
SQL> select 2 rawtohex( 3 dbms_obfuscation_toolkit.desencrypt( 4 input_string => 'password', 5 key_string => 'key12345' 6 ) 7 ) as Encrypted 8 from dual; ENCRYPTED ----------------------------------------------------- 3437EBBCAD1BB618
dbms_obfuscation_toolkit.desencrypt で暗号化するわけですが、戻ってくるものは文字列ではないので、rawtohex で16進数表示化をしています。
この結果を Powershell で正しいかどうかを検証します。
暗号化を行うコマンドレットは標準では用意されていないようなので、まずは以下のような関数を作成します。
要するに .net のクラスライブラリの力を借ります。
function Encrypt($inputString, $keyString) {
# 暗号化プロバイダの生成とモードの設定
$des = New-Object System.Security.Cryptography.DESCryptoServiceProvider
$des.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
# 秘密鍵と初期化ベクタ(IV)の設定
$des.Key = [System.Text.Encoding]::ASCII.GetBytes($keyString)
$des.IV = [Byte[]](0,0,0,0,0,0,0,0)
# 暗号化対象の設定
$inputBytes = [System.Text.Encoding]::ASCII.GetBytes($inputString)
$params = ($inputBytes, 0, $inputBytes.Length)
# 暗号化
$encrypter = $des.CreateEncryptor()
$encBytes = [System.Security.Cryptography.ICryptoTransform].GetMethod("TransformFinalBlock").Invoke($encrypter , $params)
$encrypter.Dispose()
#リターン
Write-Output $encBytes
}
# パラメータ $inputString = "password" $keyString = "key12345" # 8byte以上が必要 # 暗号化 $encBytes = Encrypt $inputString $keyString [System.BitConverter]::ToString($encBytes)
実行結果
34-37-EB-BC-AD-1B-B6-18
ついでに、この暗号が復号できるかを確認してみます。
function Decrypt($inputBytes, $keyString) { #(★)
# 暗号化プロバイダの生成とモードの設定
$des = New-Object System.Security.Cryptography.DESCryptoServiceProvider
$des.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
# 秘密鍵と初期化ベクタ(IV)の設定
$des.Key = [System.Text.Encoding]::ASCII.GetBytes($keyString)
$des.IV = [Byte[]](0,0,0,0,0,0,0,0)
# 暗号化対象の設定
$params = ($inputBytes, 0, $inputBytes.Length)
# 復号化(★)
$decrypter = $des.CreateDecryptor()
$decBytes = [System.Security.Cryptography.ICryptoTransform].GetMethod("TransformFinalBlock").Invoke($decrypter , $params)
$decrypter.Dispose()
#リターン(★)
$decString = [System.Text.Encoding]::ASCII.GetString($decBytes)
Write-Output $decString
}
# パラメータ $inputBytes = [Byte[]](0x34, 0x37, 0xEB, 0xBC, 0xAD, 0x1B, 0xB6, 0x18) $keyString = "key12345" # 8byte以上が必要 # 復号化 Decrypt $inputBytes $keyString
結果
password