Avatar billede irsild Nybegynder
08. december 2004 - 17:05 Der er 17 kommentarer og
1 løsning

Hvordan virker TripleDESCryptoServiceProvider ?

Hej. Jeg er ved at finde ud af, hvordan jeg kan krypter en streng med TripleDES. Jeg har et problem med "nøglen". Jeg går ud fra at GenerateKey()  metoden selv laver en nøgle.

1) Hvis jeg selv vil bestemme nøglen, hvad skal jeg så gøre?
2) Hvad gør denne metode: GenerateIV()  ?

Her er lidt kode:

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.GenerateKey();
tdes.GenerateIV();
byte[] tdesKey = tdes.Key;
byte[] tdesIV = tdes.IV;

tdes.CreateDecryptor(tdesKey, tdesIV)
Avatar billede arne_v Ekspert
08. december 2004 - 17:10 #1
Jeg lavede engang det her eksempel:

using System;
using System.Text;
using System.Security.Cryptography;

class MainClass
{
    public static void Main(string[] args)
    {
        Encoding utf = new UTF8Encoding();
        TripleDES des3 = new TripleDESCryptoServiceProvider();
        byte[] key = utf.GetBytes("hemmeligabcdefgh12345678");
        byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
        ICryptoTransform encrypt = des3.CreateEncryptor(key, iv);
        String plain1 = "Dette er en lille test";
        byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain1), 0, utf.GetByteCount(plain1));
        for(int i = 0; i < cipher.Length; i++)
        {
            Console.WriteLine(cipher[i]);
        }
        ICryptoTransform decrypt = des3.CreateDecryptor(key, iv);
        String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
        Console.WriteLine(plain2);
    }
}
Avatar billede arne_v Ekspert
08. december 2004 - 17:11 #2
I mit eksempel angives både key og iv manuelt.

(og så er deet en console app og ikke en ASP.NET side men det regner jeg med
at du kan abstrahere fra)
Avatar billede irsild Nybegynder
09. december 2004 - 12:07 #3
OK, det virker nu, jeg kan krypter og dekrypter i samme applikation. Mit problem er at jeg gerne vil krypter en streng med en nøgle og så i en anden applikation (lavet i delphi), dekrypter med samme nøgle? Men vil 2 forskellige TripleDES algoritmer "arbejde sammen" ?
Avatar billede arne_v Ekspert
09. december 2004 - 12:18 #4
Principielt ja.

Men der er en del variation smuligheder og de skal naturligvis være *helt*
ens.
Avatar billede irsild Nybegynder
09. december 2004 - 12:25 #5
Jeg har prøvet Mange muligheder, men ingen virker. Et problem er byte[] iv, I de delphi algoritmer jeg har set er det kun nøglen der sættes. Hvad bruges byte[] iv til?

Er det en mulighed at lave en dll i delphi med krypterings algoritmen og så dllimport i asp.net. Problemet er at så skal jeg sende nøglen med som parameter til en metode i dll. Det er vel usikkert?
Avatar billede arne_v Ekspert
09. december 2004 - 21:07 #6
citat:

The value IV is used to store an Initialization Vector, which is used to make it a little more complicated to break the encryption. The IV is added to the plaintext block to be encrypted using CBC making it slightly harder to crack.
Avatar billede arne_v Ekspert
09. december 2004 - 21:08 #7
Jeg formoder at Delphi kan lave en Win32 DLL og den kan kaldes fra .NET
Avatar billede arne_v Ekspert
09. december 2004 - 21:09 #8
Jeg kan ikke se hvorfor det skulle være mere usikkert at kalde en Win32 DLL
end en .NET assembly.
Avatar billede irsild Nybegynder
13. december 2004 - 13:36 #9
Nu prøver jeg at kalde en dll i c#. Jeg får følgende fejl:  System.Runtime.InteropServices.MarshalDirectiveException: Can not marshal parameter #2: The type definition of this type has no layout information.

Sådan ser metoden ud i dll (lavet i delphi)
procedure Enc(aInStream, aOutStream: TStream; const APassphrase: ShortString); stdcall;


Jeg prøver at kalde med dette
[System.Runtime.InteropServices.DllImport("test.dll")]
        private static extern int AESEncrypt(StreamReader inStream, StreamWriter outStream, string key);


StreamReader reader1 = new StreamReader(Server.MapPath("cyIn44.txt"), Encoding.Default);
            string str = "";
            while (reader1.Peek() >= 0)
            {   
                str += reader1.ReadLine();
            }
            str = str.Trim();

            StreamWriter outStream = new StreamWriter(Server.MapPath("cyOut.txt"));

AESEncrypt(reader1, outStream, "AøiL-2");
            reader1.Close();

Hvad kan fejlen være og hvor skal test.bin ligge for at den kan ses i mit projekt?
Avatar billede arne_v Ekspert
13. december 2004 - 13:42 #10
Jeg tror ikke at TStream og StreamReader/StreamWriter er kompatible.

Og den brokker sig vel korrekt over at den ikke kan konvertere
StreamReader/StreamWriter til en C/C++ struct.

Du skal nok lave en DLL funktion med kun simple argumenter.
Avatar billede irsild Nybegynder
13. december 2004 - 13:43 #11
som f.eks stirngs ?
Avatar billede irsild Nybegynder
13. december 2004 - 13:43 #12
strings
Avatar billede arne_v Ekspert
13. december 2004 - 13:46 #13
jep

int, string etc. er velegnede til cross language / cross platform
Avatar billede irsild Nybegynder
13. december 2004 - 14:25 #14
Nu får jeg følgende fejl: System.Runtime.InteropServices.MarshalDirectiveException: Can not marshal return value.

ny dll:
function Enc(const aInString : PChar; const APassPhrase: ShortString) : PChar; stdcall;

bruger char[] isted for streams
Avatar billede irsild Nybegynder
13. december 2004 - 14:52 #15
Hvis jeg har følgende metode i en dll:
function Enc(const aInString : PChar; const APassPhrase: ShortString) : PChar; stdcall;

Hvad skal jeg gøre for at kalde den i c#?
Avatar billede arne_v Ekspert
13. december 2004 - 22:14 #16
Kan du lave den:

function Enc(const aInString : PChar; const APassPhrase: PChar) : PChar; stdcall;

?

Så ville jeg gætte på:

[System.Runtime.InteropServices.DllImport("test.dll")]
private static extern string Enc(string aInString, string aPassPhrase);
Avatar billede irsild Nybegynder
16. december 2004 - 11:03 #17
ok, virker med string. så får du lige point.
Avatar billede arne_v Ekspert
16. december 2004 - 11:06 #18
så vil jeg ligge et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester