c# – 帮我XOR加密

c# – 帮我XOR加密,第1张

概述我在C#中编写了这个代码,用一个键来加密一个字符串: private static int Bin2Dec(string num){ int _num = 0; for (int i = 0; i < num.Length; i++) _num += (int)Math.Pow(2, num.Length - i - 1) * int.Parse(num[i]. 我在C#中编写了这个代码,用一个键来加密一个字符串:
private static int Bin2Dec(string num){    int _num = 0;    for (int i = 0; i < num.Length; i++)        _num += (int)Math.Pow(2,num.Length - i - 1) * int.Parse(num[i].ToString());    return _num;}private static string Dec2Bin(int num){    if (num < 2) return num.ToString();    return Dec2Bin(num / 2) + (num % 2).ToString();}public static string StrXor(string str,string key){    string _str = "";    string _key = "";    string _xorStr = "";    string _temp = "";    for (int i = 0; i < str.Length; i++)    {        _temp = Dec2Bin(str[i]);            for (int j = 0; j < 8 - _temp.Length + 1; j++)            _temp = '0' + _temp;        _str += _temp;    }    for (int i = 0; i < key.Length; i++)    {        _temp = Dec2Bin(key[i]);        for (int j = 0; j < 8 - _temp.Length + 1; j++)            _temp = '0' + _temp;        _key += _temp;    }        while (_key.Length < _str.Length) _key += _key;    if (_key.Length > _str.Length) _key = _key.Substring(0,_str.Length);    for (int i = 0; i < _str.Length; i++)        if (_str[i] == _key[i]) { _xorStr += '0'; } else { _xorStr += '1'; }    _str = "";    for (int i = 0; i < _xorStr.Length; i += 8)    {        char _chr = (char)0;        _chr = (char)Bin2Dec(_xorStr.Substring(i,8)); //ERROR : (Index and length must refer to a location within the string. Parameter name: length)        _str += _chr;    }    return _str;}

问题是当我想使用这段代码解密一个加密的文本时,总是会收到错误:

string enc_text = ENCRYPT.XORENC("abc","a"); // enc_text = " ♥☻"string dec_text = ENCRYPT.XORENC(enc_text,"a"); // ArgumentOutOfRangeException

任何线索?

解决方法 如果你有一个字符,一个字符,你可以将它转换成一个整数,一个int.

然后您可以使用^ *** 作符对其执行XOR.目前您似乎没有使用该运算符,这可能是您的问题的根源.

string EncryptOrDecrypt(string text,string key){    var result = new StringBuilder();    for (int c = 0; c < text.Length; c++)        result.Append((char)((uint)text[c] ^ (uint)key[c % key.Length]));    return result.ToString();}

那种事情这是一个更长的版本,有评论的步骤相同,以便于学习:

string EncryptOrDecrypt(string text,string key){    var result = new StringBuilder();    for (int c = 0; c < text.Length; c++)    {        // take next character from string        char character = text[c];        // cast to a uint        uint charCode = (uint)character;        // figure out which character to take from the key        int keyposition = c % key.Length; // use modulo to "wrap round"        // take the key character        char keyChar = key[keyposition];        // cast it to a uint also        uint keyCode = (uint)keyChar;        // perform XOR on the two character codes        uint combinedCode = charCode ^ keyCode;        // cast back to a char        char combinedChar = (char)combinedCode;        // add to the result        result.Append(combineChar);    }    return result.ToString();}

短版本是相同的,但中间变量被删除,将表达式直接替换到它们被使用的位置.

总结

以上是内存溢出为你收集整理的c# – 帮我XOR加密全部内容,希望文章能够帮你解决c# – 帮我XOR加密所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1258757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存