У меня есть 3 проекта, и я хочу, чтобы во всех 3 проектах использовались одинаковые методы шифрования и дешифрования. он работает для получения одинакового зашифрованного вывода для c# и php. Но в powershell я получаю небольшой разный вывод. Может кто-нибудь РЕДАКТИРОВАТЬ мой сценарий powershell, чтобы я получал одинаковый вывод во всех 3?
Привет, у меня есть 3 проекта, и я хочу, чтобы во всех 3 проектах использовались одинаковые методы шифрования и дешифрования. он работает для получения одинакового зашифрованного вывода для c# и php. Но в powershell я получаю небольшой разный вывод. Может кто-нибудь РЕДАКТИРОВАТЬ мой сценарий powershell, чтобы я получал одинаковый вывод во всех 3?
c# код:
public class rijndael
{
/*
* Encrypt method
* Both Keys and IVs need to be 16 characters encoded in base64.
*/
public String AES_encrypt(String Input, String AES_Key, String AES_IV)
{
// Create encryptor
var aes = new System.Security.Cryptography.RijndaelManaged();
aes.KeySize = 128;
aes.BlockSize = 128;
aes.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
aes.Key = Convert.FromBase64String(AES_Key);
aes.IV = Convert.FromBase64String(AES_IV);
var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
// Encrypt Input
byte[] xBuff = null;
using (var ms = new System.IO.MemoryStream())
{
// Convert from UTF-8 String to byte array, write to memory stream and encrypt, then convert to byte array
using (var cs = new System.Security.Cryptography.CryptoStream(ms, encrypt, System.Security.Cryptography.CryptoStreamMode.Write))
{
byte[] xXml = Encoding.UTF8.GetBytes(Input);
cs.Write(xXml, 0, xXml.Length);
}
xBuff = ms.ToArray();
}
// Convert from byte array to base64 string then return
String Output = Convert.ToBase64String(xBuff);
return Output;
}
/*
* Decrypt method
* Both Keys and IVs need to be 16 characters encoded in base64.
*/
public String AES_decrypt(String Input, String AES_Key, String AES_IV)
{
// Create decryptor
System.Security.Cryptography.RijndaelManaged aes = new System.Security.Cryptography.RijndaelManaged();
aes.KeySize = 128;
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.Key = Convert.FromBase64String(AES_Key);
aes.IV = Convert.FromBase64String(AES_IV);
var decrypt = aes.CreateDecryptor();
// Decrypt Input
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
// Convert from base64 string to byte array, write to memory stream and decrypt, then convert to byte array.
using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
{
byte[] xXml = Convert.FromBase64String(Input);
cs.Write(xXml, 0, xXml.Length);
}
xBuff = ms.ToArray();
}
// Convert from byte array to UTF-8 string then return
String Output = Encoding.UTF8.GetString(xBuff);
return Output;
}
}
rijndael rijndael_crypt = new rijndael();
string pass = rijndael_crypt.AES_encrypt("saltkeytesting@ken.vanhuffel@password", Base64Encode("1234567891123456"), Base64Encode("1234567891123456"));
код powershell:
Clear-Host
[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null
function Encrypt-String($stringToEncrypt, $AES_Key, $AES_IV)
{
# Create a COM Object for RijndaelManaged Cryptography
$aes = new-Object System.Security.Cryptography.RijndaelManaged
$aes.KeySize = 128;
$aes.BlockSize = 128;
#$aes.Mode = [System.Security.Cryptography.CipherMode]::CBC;
$aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7;
$aes.Key = [System.Convert]::FromBase64String($AES_Key);
$aes.IV = [System.Convert]::FromBase64String($AES_IV);
$encrypt = $aes.CreateEncryptor($aes.Key,$aes.IV);
[byte[]] $xBuff = $null;
$ms = new-Object IO.MemoryStream;
$cs = new-Object Security.Cryptography.CryptoStream $ms,$encrypt,"Write";
[byte[]]$xXml = [Text.Encoding]::UTF8.GetBytes($stringToEncrypt);
$cs.Write($xXml, 0, $xXml.Length);
$xBuff = $ms.ToArray();
return [Convert]::ToBase64String($xBuff);
}
$exampleString = "saltkeytesting@ken.vanhuffel@password";
$key_passphrase = "1234567891123456"
$key_bytes = [Text.Encoding]::UTF8.GetBytes($key_passphrase);
$AES_Key =[Convert]::ToBase64String($key_bytes);
$iv = "1234567891123456";
$iv_bytes = [Text.Encoding]::UTF8.GetBytes($iv);
$AES_IV =[Convert]::ToBase64String($iv_bytes);
write-host "String to encrypt is: $exampleString"
$stringToDecrypt = Encrypt-String $exampleString $AES_Key $AES_IV
write-host "Encrypted is: $stringToDecrypt"
php код:
class Rijndael128Encryptor
{
/*
* Adds PKCS7 padding
*/
private function addpadding($inputstring)
{
$blocksize = 16;
$len = strlen($inputstring);
$pad = $blocksize - ($len % $blocksize);
$inputstring .= str_repeat(chr($pad), $pad);
return $inputstring;
}
/*
* Strips PKCS7 padding
*/
private function strippadding($inputstring)
{
$slast = ord(substr($inputstring, -1));
$slastc = chr($slast);
if(preg_match("/$slastc{".$slast."}/", $inputstring)){
$inputstring = substr($inputstring, 0, strlen($inputstring)-$slast);
return $inputstring;
} else {
return false;
}
}
/*
* Encrypt method
* Both Keys and IVs need to be 16 characters encoded in base64.
*/
public function encrypt($inputstring, $inputkey, $inputiv)
{
$key = base64_decode($inputkey);
$iv = base64_decode($inputiv);
// Pad text and encrypt
$padded_string = $this->addpadding($inputstring);
$encrypted_string = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $padded_string, MCRYPT_MODE_CBC, $iv);
// Encode to base64 and return
return base64_encode($encrypted_string);
}
/*
* Decrypt method
* Both Keys and IVs need to be 16 characters encoded in base64.
*/
public function decrypt($inputstring, $inputkey, $inputiv)
{
$key = base64_decode($inputkey);
$iv = base64_decode($inputiv);
// Decode from base64 and decrypt
$decoded_string = base64_decode($inputstring);
$decrypted_string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $decoded_string, MCRYPT_MODE_CBC, $iv);
// Unpad text and return
return $this->strippadding($decrypted_string);
}
}
$encrypter = new Rijndael128Encryptor;
$encrypt_me = $encrypter->encrypt("saltkeytesting@ken.vanhuffel@password", base64_encode("1234567891123456"), base64_encode("1234567891123456"));
echo $encrypt_me;