>>>>>string cTest1 = "ABC123"; >>>>>string cTest1Encr; >>>>>string cTest1Decr; >>>>>cTest1Encr = Encrypt( cTest1, "123abc"); >>>>>cTest1Decr = Encrypt( cTest1Encr, "123abc"); >>>>>>>>>>
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cipher { public class Cipher { private const int PwMinNum = 1000; public string Encrypt(string tcStr, string tcPassword) { byte[] tcStrBytes = Encoding. GetEncoding(1252).GetBytes(tcStr); int tcStrLength = tcStrBytes.Length; string lcPassword = tcPassword + ((char) 0).ToString(); byte[] lcPasswordBytes = Encoding.GetEncoding(1252).GetBytes(lcPassword); int lnPassLen = lcPasswordBytes.Length; int lnPassPos = 0; int lnPassNum = ((CipherGetPnum(lcPasswordBytes)/997 - 1)%254) + 1; byte[] bytes = new byte[tcStr.Length]; for (int i = 0; i < tcStrLength; i++) { int lnNum01 = ((lnPassNum + (i - tcStrLength)) - 1); lnPassNum = (Math.Abs(lnNum01)%254)*Math.Sign(lnNum01) + 1; var lnByte = tcStrBytes[i] ^ (lnPassNum ^ lcPasswordBytes[lnPassPos]); bytes[i] = lnByte==0 ? tcStrBytes[i] : (byte) (lnByte & 0xFF); lnPassPos = lnPassPos > lnPassLen ? 0 : lnPassPos + 1; } return Encoding.GetEncoding(1252).GetString(bytes); } private int CipherGetPnum(IEnumerable<byte> ascii) { int liRet = 1 + ascii.Select((t, i) => t + i).Sum(); while (liRet < PwMinNum) { liRet = liRet << 1; } return liRet; } } }