1

OpenSSL에서 생성 된 공개 키를 사용하여 base64 문자열 ($ key)을 암호화하려고합니다. 그러나 (내가 찾은 바에 따르면) Certificate (PowerShell) 만 가져올 수 있으며 X509Certificate2 Object의 공개 키 추출을 사용하여 대상을 암호화 할 수 있습니다.PowerShell 비대칭 암호화

그러나 결과를 얻은 후에 파이썬 스크립트를 사용하여 결과를 해독하려고하면 원래의 일반 텍스트가 반환되지 않습니다. 그러나 파이썬 스크립트에서 동일한 키를 사용하여 암호화하고 해독하면 원래의 일반 텍스트가 반환됩니다.

그래서 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 
} 

파이썬 해독 :

#!/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) 

파이썬 암호화 : @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

표시 파이썬 스크립트뿐만 아니라, 그래서 우리는 차이를 발견 할 수 있습니다. – PetSerAl

+0

@PetSerAl OP가 코드를 추가했습니다. –

+0

PowerShell과 Python-Encrypt의 차이점은 다음과 같습니다. Python 코드는 패딩을 사용하지 않지만 PowerShell 코드는 OAEP 패딩을 사용합니다. – PetSerAl

답변

0

덕분에, 그는 PowerShell의 OAEP 패딩이 있다고 말했지만 파이썬 코드 (위)에서 아무 것도. 아래는 PKCS1_OAEP 모듈을 사용하는 편집 된 python-decrypt 코드입니다.

파이썬 해독 :

#!/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)