C#中的字符串字节转换和连接

时间:2014-10-25 12:46:24

标签: c# vb6 hex byte concatenation

我想在C#中询问以下VB6代码的等价物 正如你在这里看到的,我试图制作一个基本的加密代码,将每个字母转换为字节,然后再转换为十六进制...

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中进行了如此改编,以至于我不知道如何使用其他语言...请帮忙......谢谢!

3 个答案:

答案 0 :(得分:0)

如果你想加密字符串,我认为你最好使用XOR(在C#中的^)而不是&amp ;. 以下是您写的一些例子:

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();
    }
}

您将无法使用&amp;

解码字符串

C#具有带加密算法的System.Security.Cryptography命名空间

答案 1 :(得分:0)

定义&#34;加密&#34;。你真的只是意味着&#34;混淆&#34;?您是否尝试完全复制原始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")));
}

两者之间的唯一区别是使用哪个文本编码转换为字节。

答案 2 :(得分: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;
}