凯撒密码---对身份证的加密、解密
public class Caeser
{
#region
private const int Key = 1;
#region 加密
/// <summary>
/// 单个加密
/// </summary>
/// <param name="identityCard"></param>
/// <returns></returns>
public string Encrypt(string identityCard)
{
char[] _char = identityCard.ToCharArray();
string strCaesar = "";
for (int i = 0; i < identityCard.Length; i++)
{
string sou = _char[i].ToString(CultureInfo.InvariantCulture);
var offset = ToAscII(sou) + Key;
var tar = Convert.ToChar(offset).ToString(CultureInfo.InvariantCulture);
strCaesar += tar;
}
return strCaesar;
}
/// <summary>
/// 多张身价证加密
/// </summary>
/// <param name="identityCards"></param>
/// <returns></returns>
public string EncryptSring(string identityCards)
{
var strCaesar = "";
//分隔成身份证号数组
var identityNOs = identityCards.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (var x = 0; x < identityNOs.Length; x++)
{
var no = identityNOs[x];
char[] _char = no.ToCharArray();
for (int i = 0; i < no.Length; i++)
{
string sou = _char[i].ToString(CultureInfo.InvariantCulture);
var offset = ToAscII(sou) + Key;
var tar = Convert.ToChar(offset).ToString(CultureInfo.InvariantCulture);
strCaesar += tar;
}
strCaesar += ",";
}
return strCaesar;
}
#endregion
#region 解密
/// <summary>
/// 单个解密
/// </summary>
/// <param name="identityCard"></param>
/// <returns></returns>
public string Decrypt(string identityCard)
{
char[] _char = identityCard.ToCharArray();
string strCaesar = "";
for (int i = 0; i < identityCard.Length; i++)
{
string sou = _char[i].ToString(CultureInfo.InvariantCulture);
int offset = ToAscII(sou) - Key;
var tar = Convert.ToChar(offset).ToString(CultureInfo.InvariantCulture);
strCaesar += tar;
}
return strCaesar;
}
/// <summary>
/// 多张身价证解密
/// </summary>
/// <param name="identityCards"></param>
/// <returns></returns>
public string DecryptString(string identityCards)
{
string strCaesar = "";
var identityNOs = identityCards.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (var x = 0; x < identityNOs.Length; x++)
{
var no = identityNOs[x];
char[] _char = no.ToCharArray();
for (int i = 0; i < no.Length; i++)
{
string sou = _char[i].ToString(CultureInfo.InvariantCulture);
int offset = ToAscII(sou) - Key;
var tar = Convert.ToChar(offset).ToString(CultureInfo.InvariantCulture);
strCaesar += tar;
}
strCaesar += ",";
}
return strCaesar;
}
#endregion
/// <summary>
/// 字符串转换
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private int ToAscII(string str)
{
byte[] array = System.Text.Encoding.ASCII.GetBytes(str);
int asciicode = (short)(array[0]);
return asciicode;
}
#endregion
}
注意:多张身价证时,用","代替;
将出生日期中的 月、日用*代替:
/// <summary>
/// 将身份证号码中的月、日用* 代替
/// </summary>
/// <param name="identityCard"></param>
/// <returns></returns>
private string SplitIdentityCard(string identityCard)
{
//第一步,分隔成身份证号数组
var identityNOs = identityCard.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
//第二步,数组中每一个身份证号替换生日为*
for (var i = 0; i < identityNOs.Length; i++)
{
var no = identityNOs[i];
identityNOs[i] = no.Substring(0, 9) + "****" + no.Substring(14);
}
//第三步,将数组拼接成字符串
return string.Concat(identityNOs.Select(n => n + ",").ToArray());
}