2011-11-09 222 views
2

任何人都可以讓我知道我在這段代碼中犯了什麼錯誤嗎?此代碼是用C#.NET編寫的。我需要使用C#.NET編寫一個使用base64格式編碼字符串的算法,然後使用PHP使用base64_decode()進行解碼。請參閱以下的這段:C#:Base64編碼

System.Security.Cryptography.RijndaelManaged rijndaelCipher = new System.Security.Cryptography.RijndaelManaged(); 
rijndaelCipher.Mode = System.Security.Cryptography.CipherMode.CBC; 
rijndaelCipher.Padding = System.Security.Cryptography.PaddingMode.Zeros; 
rijndaelCipher.KeySize = 256; 
rijndaelCipher.BlockSize = 128; 

byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(_key); 
byte[] keyBytes = new byte[16]; 

int len = pwdBytes.Length; 
if (len > keyBytes.Length) len = keyBytes.Length; 

System.Array.Copy(pwdBytes, keyBytes, len); 

rijndaelCipher.Key = keyBytes; 
rijndaelCipher.IV = keyBytes; 

System.Security.Cryptography.ICryptoTransform transform = rijndaelCipher.CreateEncryptor(); 

byte[] plainText = Encoding.UTF8.GetBytes(unencryptedString); 
byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length); 

return Convert.ToBase64String(cipherBytes); 
+2

您有什麼問題?你不能base64解碼和解密在PHP中,或什麼?你有什麼錯誤嗎? –

+0

是的,當我試圖使用PHP中提供的base64_decode()函數解密它時,我正在接收一些垃圾字符。 –

+0

垃圾字符可能是**加密**字符串。爲什麼你首先要加密?請參閱下面的@Mike Duke Hall的答案。 –

回答

6

我覺得你的代碼示例是做「加密」,並且要「編碼」。 對於編碼C#與Based64一個字符串,它應該是這樣的:

static public string EncodeTo64(string toEncode) 
    { 
     byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode); 
     string returnValue = System.Convert.ToBase64String(toEncodeAsBytes); 
     return returnValue; 
    } 

而且PHP應該是這樣的:

<?php 
    $str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw=='; 
    echo base64_decode($str); 
?> 
+2

美好的回答杜克。嚴格地說,您應該通過'System.Text.Encoding.ASCII.GetBytes(toEncode)'訪問GetBytes()方法,以避免通過派生類型訪問類型的靜態成員。請參閱[這裏](http://stackoverflow.com/questions/4945439/why-is-it-useful-to-access-static-members-through-inherited-types)瞭解更多信息。 –

0

我需要寫一個算法編碼使用C#.NET

這實際上是很容易的使用Base64格式的字符串。你不需要你的複製和粘貼代碼使用的所有密碼。以下就足夠了:

byte[] bytes = Encoding.UTF8.GetBytes(inputString); 
string outputString = Convert.ToBase64String(bytes); 

如果您打算從C#發送數據通過一個HTTP GET請求,PHP,不要忘了來urlencode它。看到這個問題的詳細信息: