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