1

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) 
+0

を表示するPythonスクリプトだけでなく、私たちは違いを見つけることができます。 – PetSerAl

+0

@PetSerAl OPがコードを追加しました。 –

+0

PowerShellとPython-Encryptの違いの1つは、Pythonコードではパディングなしを使用し、PowerShellコードではOAEPパディングを使用します。 – PetSerAl

答えて

0

おかげで、彼はPowerShellでOAEPパディングがあることを言ったが、 Pythonコード(上記)には何もありません。以下は、PKCS1_OAEPモジュールを使って編集したpython-decryptコードです。

のPython-復号化:

#!/usr/bin/python 

from Crypto.PublicKey import RSA 
from base64 import b64decode 
from base64 import b64encode 
from Crypto.Cipher import PKCS1_OAEP 


privKey = "<Private key in String>" 


encKey = "<encrypted String TO DECRYPT>" 


privKey = b64decode(privKey) 
r = RSA.importKey(privKey,passphrase=None) 
cipher = PKCS1_OAEP.new(r) 

encKey = b64decode(encKey) 
decKey = cipher.decrypt(encKey) 
print decKey 
with open('sucks.txt','w') as f: 
    f.write(decKey) 
関連する問題