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