>>>>>>>>>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; >>>> } >>>> } >>>>}>>>
int lnPassLen = lcPasswordBytes.Length - 1; >>//and >>lnPassPos = lnPassPos == lnPassLen ? 0 : lnPassPos + 1;>