2014-09-10 7 views
0

저는이 C# 코드를 여기에두고 PHP로 이식하려고합니다. 이 코드는 특정 IV 및 Key를 사용하여 텍스트를 암호화하고 해독합니다. PHP로 변환하려고하지만 C# 바이트 배열 IV 이해하지 않습니다. IV와 키가 있습니다.C# Encrypter/Decrypter를 PHP로 변환

private static readonly byte[] IV = new byte[32] 
{ 
    (byte) 143, 
    (byte) 18, 
    (byte) 207, 
    (byte) 184, 
    (byte) 193, 
    (byte) 173, 
    (byte) 252, 
    (byte) 103, 
    (byte) 12, 
    (byte) 202, 
    (byte) 6, 
    (byte) 9, 
    (byte) 162, 
    (byte) 187, 
    (byte) 221, 
    (byte) 66, 
    (byte) 81, 
    (byte) 192, 
    (byte) 51, 
    (byte) 186, 
    (byte) 197, 
    (byte) 251, 
    (byte) 90, 
    (byte) 247, 
    (byte) 111, 
    (byte) 237, 
    (byte) 182, 
    (byte) 168, 
    (byte) 195, 
    (byte) 0, 
    (byte) 156, 
    (byte) 133 
}; 
private static readonly byte[] Key = new byte[32] 
{ 
    (byte) 130, 
    (byte) 94, 
    (byte) 5, 
    (byte) 131, 
    (byte) 159, 
    (byte) 45, 
    (byte) 165, 
    (byte) 206, 
    (byte) 66, 
    (byte) 115, 
    (byte) 19, 
    (byte) 144, 
    (byte) 242, 
    (byte) 142, 
    (byte) 97, 
    (byte) 6, 
    (byte) 50, 
    (byte) 47, 
    (byte) 92, 
    (byte) 70, 
    (byte) 241, 
    (byte) 179, 
    (byte) 77, 
    (byte) 121, 
    (byte) 222, 
    (byte) 243, 
    (byte) 13, 
    (byte) 171, 
    (byte) 16, 
    (byte) 92, 
    (byte) 197, 
    (byte) 174 
}; 

문자열로 변환하려고 시도했지만 이상한 문자가 많습니다. PHP, 나는이 작업을 수행 할 수 있도록 바라고 있어요 : 여기 base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, "KEY_HERE", $text, MCRYPT_MODE_ECB, "IV HERE", MCRYPT_RAND)))

는 C#을 암호화 및 복호화 기능은 다음과 같습니다

private string EncryptCommand(string command) 
{ 
    using (Rijndael rijndael = (Rijndael) new RijndaelManaged()) 
    { 
    rijndael.KeySize = 256; 
    rijndael.BlockSize = 256; 
    rijndael.Padding = PaddingMode.PKCS7; 
    using (MemoryStream memoryStream = new MemoryStream()) 
    { 
     using (CryptoStream cryptoStream = new CryptoStream((Stream) memoryStream, rijndael.CreateEncryptor(API.Key, API.IV), CryptoStreamMode.Write)) 
     { 
     byte[] bytes = Encoding.UTF8.GetBytes(command); 
     cryptoStream.Write(bytes, 0, bytes.Length); 
     cryptoStream.FlushFinalBlock(); 
     return Convert.ToBase64String(memoryStream.ToArray()); 
     } 
    } 
    } 
} 

private byte[] DecryptCommand(byte[] command) 
{ 
    using (RijndaelManaged rijndaelManaged = new RijndaelManaged()) 
    { 
    rijndaelManaged.KeySize = 256; 
    rijndaelManaged.BlockSize = 256; 
    rijndaelManaged.Padding = PaddingMode.PKCS7; 
    using (MemoryStream memoryStream = new MemoryStream()) 
    { 
     using (CryptoStream cryptoStream = new CryptoStream((Stream) memoryStream, rijndaelManaged.CreateDecryptor(API.Key, API.IV), CryptoStreamMode.Write)) 
     { 
     cryptoStream.Write(command, 0, command.Length); 
     cryptoStream.FlushFinalBlock(); 
     return memoryStream.ToArray(); 
     } 
    } 
    } 
} 
} 

주요 부분 나는 데 문제 IV를 변환됩니다와 PHP 함수에 넣을 수있는 문자열의 키. 어떤 도움을 주셔서 감사합니다.

+0

우리는 언어 번역 서비스가 제공되지 않습니다 –

+0

와우, 그 충고에 감사드립니다! 하지만 내 질문을 읽으면 키와 IV를 문자열로 변환하는 데 도움이 필요하다는 것을 알 수 있습니다. 왜냐하면 내가 시도 할 때마다 실패했기 때문입니다. 다시 해봐, 아마도? ;) –

+0

안녕하세요 radu, 당신은 평문과 그 EncryptCommand C# 코드에서 결과 암호 텍스트를 게시 할 수 있습니까? 감사. –

답변

2

바이트 배열에 해당하는 것은 PHP의 문자열입니다.

$iv = array(143,18,207,184,193,173,252,103,12,202,6,9,162,187,221,66,81,192,51,186,197,251,90,247,111,237,182,168,195,0,156,133); 
$key = array(130,94,5,131,159,45,165,206,66,115,19,144,242,142,97,6,50,47,92,70,241,179,77,121,222,243,13,171,16,92,197,174); 

$str_iv = implode(array_map("chr", $iv)); 
$str_key = implode(array_map("chr", $key)); 

그래서 내가 한 모든 작업은 바이트 배열을 가져 와서 각 배열 값을 ASCII 문자로 변환하고 모두 문자열로 연결하는 것입니다.

나는 $str_ivEncoding.ASCII.GetString(Key, 0, Key.Length)과 같은 것을 확인했습니다.