写了一个简单的加密算法,大家评一下怎么样,一般应用安全性够了吧?
算法就是 定一个密钥, 然后把要加密的字符串和密钥都转化成byte数组,然后异或,得到的结果再编码成16进制数组
解密就反之
/// <summary>
/// 异或+16进制加密/解密算法
/// </summary>
public class XorHex
{
private const string KEY = "MyKey"; // 密钥
/// <summary>
/// 加密
/// </summary>
/// <param name="txt"></param>
/// <returns></returns>
public static string Encrypt( string txt )
{
StringBuilder sb = new StringBuilder();
byte[] bs = System.Text.Encoding.Default.GetBytes( txt ); // 原字符串转换成字节数组
byte[] keys = System.Text.Encoding.Default.GetBytes( KEY ); // 密钥转换成字节数组
// 异或
for( int i = 0; i < bs.Length; i++ )
{
bs[i] = (byte)( bs[i] ^ keys[i%keys.Length] );
}
// 编码成16进制数组
foreach( byte b in bs )
{
sb.AppendFormat( "{0:x2}", b );
}
return sb.ToString();
}
/// <summary>
/// 解密
/// </summary>
/// <param name="txt"></param>
/// <returns></returns>
public static string Decrypt( string txt )
{
int len = txt.Length;
byte[] bs = new byte[len/2];
// 16进制数组转换会byte数组
for( int i = 0; i < len / 2; i++ )
{
bs[i] = (byte)(Convert.ToInt32( txt.Substring( i * 2, 2 ), 16 ) );
}
byte[] keys = System.Text.Encoding.Default.GetBytes( KEY ); // 密钥转换成字节数组
// 异或
for( int i = 0; i < bs.Length; i++ )
{
bs[i] = (byte)( bs[i] ^ keys[i % keys.Length] );
}
// byte数组还原成字符串
return System.Text.Encoding.Default.GetString( bs );
}
}
/// 异或+16进制加密/解密算法
/// </summary>
public class XorHex
{
private const string KEY = "MyKey"; // 密钥
/// <summary>
/// 加密
/// </summary>
/// <param name="txt"></param>
/// <returns></returns>
public static string Encrypt( string txt )
{
StringBuilder sb = new StringBuilder();
byte[] bs = System.Text.Encoding.Default.GetBytes( txt ); // 原字符串转换成字节数组
byte[] keys = System.Text.Encoding.Default.GetBytes( KEY ); // 密钥转换成字节数组
// 异或
for( int i = 0; i < bs.Length; i++ )
{
bs[i] = (byte)( bs[i] ^ keys[i%keys.Length] );
}
// 编码成16进制数组
foreach( byte b in bs )
{
sb.AppendFormat( "{0:x2}", b );
}
return sb.ToString();
}
/// <summary>
/// 解密
/// </summary>
/// <param name="txt"></param>
/// <returns></returns>
public static string Decrypt( string txt )
{
int len = txt.Length;
byte[] bs = new byte[len/2];
// 16进制数组转换会byte数组
for( int i = 0; i < len / 2; i++ )
{
bs[i] = (byte)(Convert.ToInt32( txt.Substring( i * 2, 2 ), 16 ) );
}
byte[] keys = System.Text.Encoding.Default.GetBytes( KEY ); // 密钥转换成字节数组
// 异或
for( int i = 0; i < bs.Length; i++ )
{
bs[i] = (byte)( bs[i] ^ keys[i % keys.Length] );
}
// byte数组还原成字符串
return System.Text.Encoding.Default.GetString( bs );
}
}