>>>>>>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; > } > } >}Thank you very much. Your code works; almost 100%. Except when a string that you are trying to encrypt has more than 2 spaces