>>>>>>>>>>>>>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;>>>>>