OpenSSLから生成された公開鍵を使用して、base64文字列($ key)を暗号化しようとしています。しかし(私が見つけたところから)、PowerShellで証明書をインポートしてから、X509Certificate2オブジェクトの公開鍵抽出を使ってターゲットを暗号化するだけです。PowerShell非対称暗号化
しかし、結果を得た後、私はpythonスクリプトを使用して結果を解読しようとすると、私は元の平文を返さない。しかし、私はPythonスクリプトで同じキーを使用して暗号化と復号化を行うと、元の平文を取り戻します。
私は、PowerShell公開鍵の暗号化を間違って実行したか(下の図を参照)、または私が立ち往生していることを推測しています。
のPowerShell:
function encryptKey(){
Param(
[Parameter(Mandatory = $true,Position = 0,HelpMessage = 'key')]
[ValidateNotNullorEmpty()]
[String]$key
)
[byte[]] $certBytes = <byte array of public key, extracted from certificate from OpenSSL>
$cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($certBytes)
$byteval = [System.Text.Encoding]::UTF8.GetBytes($key)
$encKey = $cert.PublicKey.Key.Encrypt($byteval, $true)
$encKey = [System.Convert]::ToBase64String($encKey)
return $encKey
}
のPython-復号化:
#!/usr/bin/python
from Crypto.PublicKey import RSA
from base64 import b64decode
from base64 import b64encode
privKey = "<Private key in String>"
encKey = "<encrypted String TO DECRYPT>"
privKey = b64decode(privKey)
r = RSA.importKey(privKey,passphrase=None)
encKey = b64decode(encKey)
decKey = r.decrypt(encKey)
print decKey
with open('sucks.txt','w') as f:
f.write(decKey)
Pythonの暗号化:@PetSerAlへ
from Crypto.PublicKey import RSA
from base64 import b64decode
from base64 import b64encode
key64 = b'<Public Key (extracted) >'
keyDER = b64decode(key64)
keyPub = RSA.importKey(keyDER)
key = "TPnrxxxxxxjT8JLXWMJrPQ==" #key is the target to be encrypted
enc = keyPub.encrypt(key,32)
enc = ''.join((enc))
print b64encode(enc)
を表示するPythonスクリプトだけでなく、私たちは違いを見つけることができます。 – PetSerAl
@PetSerAl OPがコードを追加しました。 –
PowerShellとPython-Encryptの違いの1つは、Pythonコードではパディングなしを使用し、PowerShellコードではOAEPパディングを使用します。 – PetSerAl