Encrypt/Decrypt strings in C/AL
Views (6066)
Following can be used, if you need a encryption/decryption function in NAV. In this quite simple sample there is shown the usage of the TripleDES encryption algorithm. The base are the cryptograhic function in namespace System.Security.Cryptography of the .net framework.
// local variables
TripleDESEnc DotNet System.Security.Cryptography.TripleDES.'mscorlib, Version=4.0.0.0, culture=neutral, PublicKeyToken=b77a5c561934e089'
cStream DotNet System.Security.Cryptography.CryptoStream.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
cMode DotNet System.Security.Cryptography.CryptoStreamMode.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
cEnc DotNet System.Security.Cryptography.ICryptoTransform.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
TripleDESDec DotNet System.Security.Cryptography.TripleDES.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
cDec DotNet System.Security.Cryptography.ICryptoTransform.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
cKey DotNet System.Byte.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
initVector DotNet System.Byte.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
fStream DotNet System.IO.FileStream.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
fMode DotNet System.IO.FileMode.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
sWriter DotNet System.IO.StreamWriter.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
sReader DotNet System.IO.StreamReader.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
sData Text 1024
FileName Text 1024
file File
// the code
sData := 'Here is some data to encrypt.';
FileName := 'c:\temp\CText.txt';
// encrypt part
fMode := fMode.OpenOrCreate;
fStream := fStream.FileStream(FileName,fMode);
TripleDESEnc := TripleDESEnc.Create('TripleDES');
// create encryptor and internally a random key and a random IV
cEnc := TripleDESEnc.CreateEncryptor;
cMode := cMode.Write;
cStream := cStream.CryptoStream(fStream,cEnc,cMode);
sWriter := sWriter.StreamWriter(cStream);
sWriter.WriteLine(sData);
sWriter.Close;
cStream.Close;
fStream.Close;
file.OPEN(FileName);
file.READ(sData);
file.CLOSE;
// display encrypted string
MESSAGE('Encrypted: ' + sData);
// decrypt
fMode := fMode.OpenOrCreate;
fStream := fStream.FileStream(FileName, fMode);
TripleDESDec := TripleDESDec.Create;
// reuse the key/iv-pair, created above
cDec := TripleDESDec.CreateDecryptor(TripleDESEnc.Key,TripleDESEnc.IV);
cMode := cMode.Read;
cStream := cStream.CryptoStream(fStream,cDec,cMode);
sReader := sReader.StreamReader(cStream);
sData := sReader.ReadLine;
sReader.Close;
cStream.Close;
fStream.Close;
MESSAGE('Decrypted: ' + sData);
In the sample the same Key/IV pair was used for encryption and decryption, automatically created by method CreateEncryptor. To use your own Key/IV pair use method CreateEncryptor(byte[] key, byte[] iv) or set the Key and IV property of the encryptor/decryptor.
...
CreateByteArray(cKey, 'abcdefghijklmnoqprstuvwx'); // length: 24
CreateByteArray(initVector, 'abcdefgh'); // length: 8
TripleDESEnc.Key(cKey);
TripleDESEnc.IV(initVector);
cEnc := TripleDESEnc.CreateEncryptor;
...
CreateByteArray(VAR ByteArray : DotNet "System.Array";InputString : Text)
// local variables
// idx Integer
// ArrayType DotNet System.Type.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
// ByteValue Byte
// StrLength Integer
StrLength := strlen(InputString);
ArrayType := ArrayType.GetType('System.Byte',FALSE);
ByteArray := ByteArray.CreateInstance(ArrayType,StrLength);
FOR idx := 1 TO StrLength DO BEGIN
ByteValue := InputString[idx];
ByteArray.SetValue(ByteValue,idx - 1);
END;
Links:
http://msdn.microsoft.com/de-de/library/z565ef9x(v=vs.110).aspx
Filed under: c/al, encryption, nav 2009, nav 2013, nav functions Tagged: c/al, encryption, nav 2009, nav 2013

Like
Report
*This post is locked for comments