2012-03-26 28 views
7

Tôi đang cố gắng mã hóa một số chuỗi qua lại từ chuỗi cơ số 64 và tôi đang có đồ trang trí để có được kết quả đúng.Mã hóa chuỗi đến và đi từ base-64

string text = base64string.... //Here I have a base-64 string. 
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); 
string base64Encoded = Convert.ToBase64String(encodedByte); 

if (text == base64Encoded) //If the new encoded string is equal to its original value 
    return base64Encoded; 

Tôi đã thử cách để thực hiện việc này và dường như không có kết quả đúng. Tôi đã thử cả hai với System.Text.Encoding.UnicodeSystem.Text.Encoding.UTF8

Điều gì có thể là vấn đề? Có ai có một giải pháp thích hợp?

+0

Ok đọc qua mã của bạn, bạn đang dùng chuỗi base64 rồi mã hóa thành base64 rồi so sánh chuỗi được mã hóa với orignal? – Brian

+0

Tại sao bạn bắt đầu từ biểu mẫu được mã hóa? Bạn có thể thử làm mã hóa đầu tiên từ bản rõ, sau đó giải mã nó. Hay bạn đang cố thực hiện thuật toán mã hóa/giải mã? – Attila

+0

@Brian - Vâng đó là những gì tôi đang làm. –

Trả lời

9
string text = base64string.... //Here I have a base-64 string. 
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); 
string base64Encoded = Convert.ToBase64String(encodedByte); 

Bạn đang mã hóa đôi chuỗi. Bạn bắt đầu bằng chuỗi base64, nhận các byte và sau đó mã hóa lại một lần nữa. Nếu bạn muốn so sánh, bạn sẽ cần bắt đầu bằng chuỗi gốc.

+0

S - Tôi biết điều đó. Những gì tôi muốn là để mã hóa một chuỗi base-64 sang định dạng khác và sau đó mã hóa trở lại base-64 một lần nữa, chỉ để xem kết quả của việc mã hóa đã không mất bất kỳ dữ liệu nào. Tôi biết đó là một hoạt động ngớ ngẩn, nhưng tôi vẫn muốn làm điều đó. –

+2

@ErikLarsson: Vâng base64 đã đảm bảo rằng bạn sẽ không bị mất dữ liệu, vì vậy tôi không thấy điểm. Tuy nhiên, nếu bạn biết những gì tôi đang nói với bạn ... thì câu hỏi là gì? Rõ ràng bạn sẽ không nhận được cùng một điều khi bạn mã hóa một chuỗi một lần nữa và một lần nữa.Bắt đầu với chuỗi gốc, mã hóa nó, giải mã nó nếu bạn thực sự muốn kiểm tra. –

6

Nếu text là một chuỗi cơ sở-64, sau đó bạn đang làm nó ngược:

byte[] raw = Convert.FromBase64String(text); // unpack the base-64 to a blob 
string s = Encoding.UTF8.GetString(raw); // assume the blob is UTF-8, and 
             // decode to a string 

đó sẽ giúp bạn có được nó như là một string. Tuy nhiên, lưu ý rằng kịch bản này chỉ hữu ích để biểu diễn văn bản unicode ở định dạng ascii. Thông thường bạn sẽ không base-64 mã hóa nó nếu nội dung gốc là string.

0

Bạn đã đặt mã mã hóa chính xác. Để khẳng định chuỗi base64 mã hóa là đúng, bạn có thể thử giải mã nó và so sánh các nội dung giải mã với bản gốc:

var decodedBytes = Convert.FromBase64String(base64encoded); 
var compareText = System.Text.Encoding.ASCII.GetString(decodedText); 

if (text == compareText) 
{ 
    // carry on... 
    return base64encoded; 
} 
1

Chuyển đổi bất cứ điều gì mà bạn cần trong Base64 thành một mảng Byte sau đó sử dụng FromBase64String và ToBase64String để chuyển đổi đến và từ Base64:

Byte[] buffer = Convert.FromBase64String(myBase64String1); 
myBase64String2 = Convert.ToBase64String(buffer); 

myBase64String1 sẽ bằng myBase64String2. Bạn sẽ cần phải sử dụng các phương pháp khác để có được kiểu dữ liệu của bạn vào một mảng Byte và ngược lại để có được kiểu dữ liệu của bạn trở lại. Tôi đã sử dụng điều này để chuyển đổi nội dung của một lớp thành một mảng byte và sau đó đến chuỗi Base64 và ghi chuỗi vào hệ thống tập tin. Sau đó tôi đọc nó trở lại một thể hiện lớp bằng cách đảo ngược quá trình.

Các vấn đề liên quan