Lethalis schreef op dinsdag 31 mei 2016 @ 08:58:
Gezien het tijdgebrek dat je hebt, zou ik een globale boolean zetten ergens (static property in een class).
Dus bijv. MijnTool.DevMode die standaard true is.
Vervolgens zou ik een preprocessor directive gebruiken om hem op false te zetten. Dan heb je die directive maar op 1 plek.
Vervolgens kun je overal in de code gewoon MijnTool.DevMode gebruiken om de functionaliteit aan / uit te zetten.
Wil je in de toekomst iets anders gebruiken, dan laat je dat die property zetten.
zo wilde ik het inderdaad doen.
Dat zal ook de compilatie variant worden.
Maar ik zat nog met een 2e wens eigenlijk.
Ik moet voor elke klant een variant maken. Al deze versie hebben dus beperkte functionaliteit maar de applicatie moet wel een unieke klant id bevatten. Dit is niet meer dan een byte.
Nu had ik vandaag het idee om bij de executable gewoon een text file of whatever voor file mee te leveren met ene encrypted string.
Ik zal te denken om bijvoorbeeld een string te gebruiken als "devMode=true;customerId=123"
Als ik deze string assymetrisch encrypt en in een file schrijf, dan kan ik de tool laten zoeken naar deze file. de string decrypten en aan de hand daarvan wat opties enablen of het klant ID bepalen.
Dat lijkt me een eenvoudige oplossing.
Nu ben ik niet zo thuis in encryptie maar om iets assymetrisch te encrypten/decrypten met RSA is niet spannend. Nu had ik al 2 voorbeelden op codeProjects gezien en die doen wat ik zou willen, echter had ik bij assymetrische encrypte verwacht dat ik ergens in mijn code de private en public key moet ingeven maar die zie ik nergens terug komen.
de voorbeeld code is:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
byte[] encryptedData;
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Import the RSA Key information. This only needs
//toinclude the public key information.
RSA.ImportParameters(RSAKeyInfo);
//Encrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
return encryptedData;
}
//Catch and display a CryptographicException
//to the console.
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
} |
vevolgens wordt de functie zo gebruikt:
C#:
1
2
| RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
encryptedtext = RSAEncrypt(plaintext, RSA.ExportParameters(false), false); |
werkt RSA niet met private/public keys?
Mijn idee was dus om op het werkt 1 tool te beheren die de keys genereert en dat de applicatie die we aan klanten geven enkel deze keys decrypt