想在字符或位移的ASCII码中添加一个数字

时间:2013-04-05 15:42:34

标签: c# ascii

好的,我接受一个字符串输入,将其转换为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并在值中添加一定数量。 我基本上是为了加密而做它的一小部分。 和 如果我们添加的数字可以随机生成...我们可以在解密文本时使用它吗?

3 个答案:

答案 0 :(得分: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,您将使用相同的按位运算符^进行“解密”,其方式与此处用于“加密”的方式相同。

答案 1 :(得分: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 ++)。

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

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