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)
표시 파이썬 스크립트뿐만 아니라, 그래서 우리는 차이를 발견 할 수 있습니다. – PetSerAl
@PetSerAl OP가 코드를 추가했습니다. –
PowerShell과 Python-Encrypt의 차이점은 다음과 같습니다. Python 코드는 패딩을 사용하지 않지만 PowerShell 코드는 OAEP 패딩을 사용합니다. – PetSerAl