Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
How to call VFP function from .NET C# code?
Message
De
07/01/2015 03:48:34
 
 
Information générale
Forum:
ASP.NET
Catégorie:
Autre
Versions des environnements
Environment:
VB 9.0
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01612997
Message ID:
01613216
Vues:
70
>>>>>I am testing your code and mine code and neither one works :). I am sure it is me. Here is how I test it, please let me know if this is the correct approach:
>>>>>
>>>>>string cTest1 = "ABC123";
>>>>>string cTest1Encr;
>>>>>string cTest1Decr;
>>>>>cTest1Encr = Encrypt( cTest1, "123abc");
>>>>>cTest1Decr = Encrypt( cTest1Encr, "123abc");
>>>>>
>>>>>
>>>>>Shouldn't cTest1Decr show "ABC123"?
>>>>
>>>>Aren't you encrypting the values instead of decrypting the 2nd?
>>>
>>>The second parameter is the password string. The first one is the value.
>>
>>Too late to play tonight - I'll get back to you in the morning (my morning :-} )

Encoding problem when char values > 128. This should work. Didn't look at your code I'm afraid:
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;
        }
    }
}
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform