2014-10-25 2 views
-1

Я хотел бы попросить эквиваленты следующего кода VB6 в C# Как вы можете видеть здесь, я пытаюсь сделать базовый код шифрования, который преобразует каждую букву в байты а затем снова преобразовать в шестнадцатеричной ...Преобразование строк и конкатенация в C#

Public Function Encrypt(s As String) As String 
    Dim bytArray() As Byte 
    bytArray = StrConv(s, vbFromUnicode) 
    For i = LBound(bytArray) To UBound(bytArray) 
     Encrypt = Encrypt & Hex(bytArray(i)) 
    Next i 
End Function 

Я попытался немного C#, но я не могу понять это ...

private string encrypt(string s, byte[] bytArray, string t) 
{ 
    bytArray = ????; 
    for(int i = 0; i < s.Length ????; i++{ 
     t += Hex(bytArray[i]); ???? 
    } 
    return t; 
} 

Я сожалею, что я на самом деле новичок в C#, и я настолько адаптирован в BASIC, что не знаю, как привыкнуть к другим языкам ... пожалуйста, помогите ... th anks!

+0

Почему вы переходящая в 'bytArray' и' Т *? Возможно, вам стоит начать с изучения некоторых базовых учебников по C#, чтобы просто изучить язык. –

ответ

0

Если вы хотите зашифровать строку, я думаю, вам лучше использовать XOR (^ в C#), чем &. Вот пример того, как вы писали:

using System.IO; 
using System; 
using System.Text; 

class Program 
{ 
    static void Main() 
    { 
     string input = "test input"; 
     byte[] key = new byte[input.Length]; 
     Random r = new Random(DateTime.Now.Millisecond); 
     for (int i = 0; i < key.Length; i++) 
     { 
      key[i] = (byte)r.Next(); 
     } 
     var result = Encrypt(input, key); 
     Console.WriteLine(result); 
    } 

    static string Encrypt(string inp, byte[] key){ 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < inp.Length; i++) 
     { 
      sb.Append(inp[i] & key[i]); 
     } 
     return sb.ToString(); 
    } 
} 

вы не сможете декодировать строку, используя &

C# имеет System.Security.Cryptography пространство имен с алгоритмами шифрования

0

Определите «шифровать». Вы действительно имеете в виду «обфускацию»? Вы пытаетесь воспроизвести оригинал VB6 точно? Или просто добиться подобного эффекта?

Один из возможных подходов (это будет кодировать Unicode байт):

using System.Text; 

string Encrypt(string text) 
{ 
    return string.Concat(
     Encoding.Unicode.GetBytes(text).Select(b => b.ToString("x2"))); 
} 

Другая возможность (это будет точно такой же результат, как код VB6):

using System.Text; 

string Encrypt(string text) 
{ 
    return string.Concat(
     Encoding.Default.GetBytes(text).Select(b => b.ToString("x2"))); 
} 

Единственное различие между два - это то, какое текстовое кодирование используется для преобразования в байты.

+0

Ошибка: тип argumens для метода 'System.Linq.Enumerable.Select .... blah .... Попробуйте явно указать аргументы типа .... –

+0

Работает отлично для меня как есть. Возможно, вы скопировали код неправильно. Или, может быть, вы ориентируетесь на более старую версию .NET? Обратите внимание, что вам также нужно «использовать System;» и «using System.Linq;», но я не думаю, что если бы вы их оставили, вы получили сообщение об ошибке, подобное тому, которое вы частично цитировали.Публикация текста ошибки _complete_ может дать мне или кому-то еще лучшее представление о том, что происходит с вашей стороны. –

+0

Возможно, да, я скопировал код неправильно ... Я пользуюсь телефоном, после ... В любом случае, я использую VS2013 и .NETfx 4.5 здесь ... и все те пространства имен, которые вы упомянули, здесь ... lemme ask: что происходит после b.ToString? и я не понимаю, откуда б пришел из-за причины, которую я не видел. Hehe –

0

точная версия

VB.NET

Public Function Encrypt(s As String) As String 
    Encrypt = String.Empty 
    Dim byteArray() As Byte = System.Text.Encoding.Unicode.GetBytes(s) 
    For Each b As Byte In byteArray 
     Encrypt &= Hex(b) 
    Next 
End Function 

C#

static string Encrypt(string s) 
{ 
    string encrypt = ""; 
    byte[] byteArray = System.Text.Encoding.Unicode.GetBytes(s); 
    foreach (byte b in byteArray) 
    { 
     encrypt += String.Format("{0:x}", System.Convert.ToInt64(b)); 
    } 
    return encrypt; 
} 

короткая версия - требует строки форматирования

VB.NET

Public Function Encrypt(s As String) As String 
    Dim byteArray() As Byte = System.Text.Encoding.Unicode.GetBytes(s) 
    Encrypt = BitConverter.ToString(byteArray) 
End Function 

C#

static string Encrypt(string s) 
{ 
    byte[] byteArray = System.Text.Encoding.Unicode.GetBytes(s); 
    string encrypt = BitConverter.ToString(byteArray); 
    return encrypt; 
} 
Смежные вопросы