C#中使用进制转换思想对字符串进行任意进制任意字典的加密和解密
2013-12-03 21:52
811 查看
C#中使用进制转换思想对字符串进行任意进制任意字典的加密和解密
十进制字典顺序编码效果,可以实现任意进制字典乱序的,只需修改对应的字典的和chNum值即可
字典:string characters = "wertyuiop234567890dfgkl;'m,h1q[sj./]zxcvbna"; //字典字符串; chNum=3:
class Program { static void Main(string[] args) { string str; //str = Console.ReadLine(); str=@"123abc ,./\ 我是中国人 ,。、"; str.Replace(@"\", @"\\"); //解决不能输入'\'的问题,@表示忽略转义符 string characters = "0123456789"; //字典字符串 Console.WriteLine("编码字符串:"); string numToStr = Encode(str, characters); //编码 Console.WriteLine(numToStr); Console.WriteLine("解码字符串:"); string strToNum = Decode(numToStr, characters); //解码 Console.WriteLine(strToNum); Console.ReadKey(); } const int chNum = 5; //需要编码的最大字符的在对应的进制编码时的最大的位数,例如10进制时,汉字在unicode中最后一个汉字是5位,chNum=5; public static string Encode(string str, string characters) //参数:str是要编码的字符串,character是要加码的字典 { List<string> result = new List<string>(); foreach (char ch in str.ToCharArray()) //取出每个字符 { int t = (int)ch; //把字符转成对应unicode编码的整数,例如:你 20320 for (int i = 0; i < chNum; i++) //每一个字符都是等长编码,例如:a-97,你-20320,都编码成5位 { var mod = t % characters.Length; //取每一位数值 t = t / characters.Length; var _ch = characters[Convert.ToInt32(mod)].ToString(); //转换到字典对应的位上 result.Insert(0, _ch); //编码成新的字符串 } } return string.Join("", result.ToArray()); //转换成字符串输出 } public static string Decode(string str, string characters) { List<string> result = new List<string>(); for (int i = 0; i < (str.Length / chNum); i++) //等长编码,按每chNum位取出一个字符 { char[] ch = str.Substring(i * chNum, chNum).ToCharArray(); //取出对应为的chNum位字符,转成数组 int power=0; //次幂计数器 int t=0; //对应的unicode的数值 foreach (var _ch in new string(ch.Reverse().ToArray())) //把取出的每一位的字符反向进入转换成原码 { t += characters.IndexOf(_ch) * ((int)Math.Pow(characters.Length, power)); //在字典中找到第一次出现该字符的值的大小乘上对应进制的次幂 power++; } result.Insert(0, ((char)t).ToString()); //把整型变量数值对应的unicode转成对应的char型,插入新的字符串 } return string.Join("", result.ToArray()); //转成字符输出 } }
十进制字典顺序编码效果,可以实现任意进制字典乱序的,只需修改对应的字典的和chNum值即可
字典:string characters = "wertyuiop234567890dfgkl;'m,h1q[sj./]zxcvbna"; //字典字符串; chNum=3:
相关文章推荐
- C#使用RSA进行私钥加密公钥解密
- 使用Java Base64解密算对openssl的base64加密字符串进行解密
- JAVA中使用RSA通过秘钥文件对字符串进行加密解密
- LINUX、C#下使用DES算法CBC模式进行对称加密、解密
- C#字符串使用密钥进行加解密
- C#使用RSA证书文件加密和解密示例(任意长度的内容)
- C#使用RSA进行私钥加密公钥解密
- C# 中使用 OpenSSL 的公钥/私钥进行加密和解密
- [原创]使用 DES算法 任意字符串 加密解密程序1.0
- Java:如何使用Cipher类对字符串进行加密解密
- 使用Base64进行string的加密和解密 公钥加密—私钥签名
- 解决linux c利用openssl进行3des和安卓封装的接口加密解密出的字符串不一样的问题
- 初学C#之进制转换(支持十进制小数转任意进制【2到36进制】)
- C#一个字符串的加密与解密
- 使用java进行 AES 加密 解密
- 使用证书对数据进行签名、验签、加密、解密以及openssl的常用方法
- C#中使用DES和AES加密解密
- 利用Java API对字符串进行加密解密(DES加密算法)
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证