2016-04-02 13 views
0

50 karakter dizgisini şifrelemeye çalıştığımda System.Security.Cryptography.RSACryptoServiceProvider nesnesini kullanarak kötü bir uzunluk elde ediyorum şifrelenirken hata oluştu. Eğitilmiş tahminim, dizenin uzunluğunun çok fazla olması (belki de [bayt] sınırlaması var mı?), Çünkü bir 39char dizim olduğunda her şey iyi çalışıyor. AşağıdaPowershell System.Security.Cryptography.RSACryptoServiceProvider, 50 karakterden fazla şifreli parola kabul etmiyor

Tam hataları:

İstisna "2" argümanı (ler) ile "Şifrele" çağrısında: "Kötü Uzunluk " [atlanmış]
+ $ şifreli = $ rsa.Encrypt ($ At bytes, $ true) + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: CryptographicException "2" değişken (ler) i ile "şifresini" arama

durum: OAEP çözme sırasında "Hata oluştu dolgu malzemesi." [atlandı] + $ Şifre = [char []] $ rsa.Decrypt ($ şifreli, $ true) -join "" | Co ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: CryptographicException

My kodu:

function Checkpassword([String] $Type) { 
$pwpath = "$root\$Type.pw" 
$encrypted = '' 

if (test-path $pwpath -erroraction silentlycontinue) { 
    $encrypted = Import-Clixml $pwpath 
} 

if(!($encrypted)) { 
    write-host "No $Type password file found, create one now by entering your $Type password." -fore yellow 

    # Create password file using local encryption 
    $key = (2,3,56,34,254,222,1,1,2,23,42,54,33,233,1,34,2,7,6,5,35,43,6,6,6,6,6,6,31,33,60,23) 
    $pass = Read-Host "Enter your $Type password" -AsSecureString 
    $securepass = $pass |ConvertFrom-SecureString -Key $key 
    $bytes = [byte[]][char[]]$securepass    

    $csp = New-Object System.Security.Cryptography.CspParameters 
    $csp.KeyContainerName = "SuperSecretProcessOnMachine" 
    $csp.Flags = $csp.Flags -bor [System.Security.Cryptography.CspProviderFlags]::UseMachineKeyStore 
    $rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 5120,$csp 
    $rsa.PersistKeyInCsp = $true 

    $encrypted = $rsa.Encrypt($bytes,$true) 
    $encrypted |Export-Clixml "$root\$Type.pw" -force 
} 

$key = (2,3,56,34,254,222,1,1,2,23,42,54,33,233,1,34,2,7,6,5,35,43,6,6,6,6,6,6,31,33,60,23)    

$csp = New-Object System.Security.Cryptography.CspParameters 
$csp.KeyContainerName = "SuperSecretProcessOnMachine" 
$csp.Flags = $csp.Flags -bor [System.Security.Cryptography.CspProviderFlags]::UseMachineKeyStore 
$rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 5120,$csp 
$rsa.PersistKeyInCsp = $true 

$Password = [char[]]$rsa.Decrypt($encrypted, $true) -join "" |ConvertTo-SecureString -Key $key 
$credential = New-Object System.Management.Automation.PsCredential ".",$Password } 
+3

[docs] (https://msdn.microsoft.com/en için başka şifreleme algoritması daha uygun kullanmak -us/library/f17a0e2k% 28v = vs.110% 29.aspx? f = 255 & MSPPError = -2147217396), aşağıdaki gibi açıklanan OAEP dolgu ile birleştirildiğinde giriş bayt dizisi için bir boyut sınırından bahsetmektedir: 'Modül boyutu -2 - 2 * hLen, hLen, hash'ın büyüklüğüdür. Umarım, ne anlama geldiğini bilirim. – mklement0

cevap

1

ConvertFrom-SecureString -Key $Key numaralı telefonu aradığınızda dizeyi 3B ile örtülü olarak şifrelediğinizi unutmayın.

Bu dize kendisi yalnızca ~ 100 bayt olsa da, elde edilen yük ($bytes) bir düz metin için en büyük boyutu OEAP ve 4096 bit anahtar ile şifrelenmiş zaten ötesinde boyut olarak> 500 bayt olduğu anlamına gelir.

Anahtar kapta daha büyük anahtarı yüklemek edebilir, ya (daha doğrusu) uzun iletilerin şifrelenmesi