-1

好的,我接受一个字符串输入,将其转换为 char 数组并将其 ASCII 保存在一个数组中。

Random r = new Random();
        Console.WriteLine("Enter name : ");
        char[] name = Console.ReadLine().ToCharArray();
        byte[] by = new byte [name.Length];
        int[] arr = new int[name.Length];
        FileStream fs = new FileStream("F:\\abc.txt", FileMode.Create, FileAccess.Write);
        for (int i = 0; i < name.Length; i++)
        {
            fs.WriteByte((byte)name[i]);
        }

        for (int i = 0; i <name.Length ; i++)
        {
            by[i] =  ( ((byte )name[i]));

        }
        //for (int i = 0; i < name.Length; i++)
        //{
        //   arr[i] = (byte by[i] (Convert.ToInt16);
        //}
        // fs.WriteByte(48); fs.WriteByte(8); fs.WriteByte(60); fs.WriteByte(80);
        fs.Flush();
        fs.Close();

它保存了 ASCII ......我们可以通过任何方式将其转换为 int 并在值中添加某个数字。我基本上是为了加密而做的,它只是其中的一小部分。并且如果我们添加的数字可以随机生成......我们可以在解密文本时继续使用它吗?

4

3 回答 3

0

这可能会帮助你。您实际上不需要在语言级别转换为数字 - 您的信息更容易作为字符串或字节数组进行操作。

以下代码替换现有代码的输出部分,并使用Random实例对随机数进行按位相加r

byte[] randomNumber = new byte[name.Length];
r.NextBytes(randomNumber);
for (int i = 0; i <name.Length ; i++)
{
    fs.WriteByte((byte)name[i] ^ randomNumber[i]);
}

假设您打算randomNumber单独存储某处,您将使用相同的按位运算符^进行“解密”,其方式与此处用于“加密”的方式相同。

于 2013-04-05T15:57:55.237 回答
0

使用 C# 有点棘手,因为(根据MSDN) Char 是 16 位 Unicode 数值,而不仅仅是 ASCII,所以您必须小心使用非 ASCII 符号和解析具有奇怪编码的文件。另一方面,它可以很容易地转换为 Unsigned Short Int、Int、Double 和其他一些类型。

基本上,简单的类型转换可以解决问题:

char character;
int ascii_code = (int)character;
//some fency math and encoding with ascii_code goes here...
char encrypted_char = (char)ascii_code;

不确定,如果 Visual Studio 允许直接使用char类型变量进行数学运算(C、C++ 可以)。

于 2013-04-05T16:10:29.920 回答
0

正确执行此操作的方法是:

Console.WriteLine("Enter your name:");
string name = Console.ReadLine();
byte[] ascii = Encoding.ASCII.GetBytes(name);
short[] shorts = bytes.Select(b => (short)b).ToArray();
int[] finalBytes = new int[shorts.length];
int[] randomKey = new int[shorts.length];
int ndx = 0;
Random r = new Random();

foreach (short b in shorts)
{
    int rByte = r.Next(1, 5000);
    int singleByte = b + rByte;
    finalBytes[ndx] = singleByte;
    randomKey[ndx] = rByte;
    ndx++;
}

// finalBytes now holds your data. Do something with it!
// randomKey holds your hash data. To decode this, you'll
// need to subtract the value in randomKey[n] from finalBytes[n]

正如其他人所说,强烈建议不要在任何生产代码中使用此代码!

于 2013-04-05T16:33:50.373 回答