Avatar billede md_craig Nybegynder
03. april 2005 - 12:02 Der er 13 kommentarer og
1 løsning

Kryptering og dekryptering med build in Algoritmer

Hej... skal lige se om jeg kunne få lidt hjælp til noget kryptering...

Jeg har fundet ud af hvordan man får oprettet en given nøgle fra fx SHA512, MD5 osv... men videre i eksemplet har jeg kun kunne finde eksempler på at Kryptere Filer med det... jeg jeg skulle gerne bare Kryptere / Dekryptere en text streng... (string)...

Til fx at lagre persondata... eller andet (jeg vil nok kunne bruge det til ufattelig meget...)
Avatar billede arne_v Ekspert
03. april 2005 - 12:05 #1
Du kan ikke dekryptere SHA & MD5 !
Avatar billede md_craig Nybegynder
03. april 2005 - 12:06 #2
Nej... dem skal du bruge som nøgler... der laver du jo en Hash du bruger til at kryptere med...
Avatar billede arne_v Ekspert
03. april 2005 - 12:07 #3
OK

3DES 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
03. april 2005 - 12:07 #4
og du kan så bruge dit hash til key
Avatar billede arne_v Ekspert
03. april 2005 - 12:08 #5
Jeg har også et AES eksempel på lager:

import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class AES {
    private Cipher aes;
    private SecretKey aeskey;
    public AES(String key) {
        try {
            Security.addProvider(new com.sun.crypto.provider.SunJCE());
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
            aes = Cipher.getInstance("AES");
            aeskey = new SecretKeySpec(key.getBytes(), "AES");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    private byte[] encrypt(byte[] plaindata) throws Exception {
        aes.init(Cipher.ENCRYPT_MODE, aeskey);
        return aes.doFinal(plaindata);
    }
    private byte[] decrypt(byte[] cipherdata) throws Exception {
        aes.init(Cipher.DECRYPT_MODE, aeskey);
        return aes.doFinal(cipherdata);
    }
    public static void main(String[] args) throws Exception {
        AES ec = new AES("hemmelighemmelig");
        String s1 = "Dette er en test";
        byte[] b1 = ec.encrypt(s1.getBytes());
        byte[] b2 = ec.decrypt(b1);
        String s2 = new String(b2);
        System.out.println(s2);
    }
}
Avatar billede md_craig Nybegynder
03. april 2005 - 12:08 #6
givet eksempel så har du fx en nøgle: mads (ikke særlig brugbart)...
Kaster du den igennem fx... Sha512 får du en nøgle der ser nogenlunde således ud:

d1a0e1b5de3790f5df3299de7944a8778e8c42920773a84b06d7fcc08c354cbd016a0727103a2adef72926d39e1bf0961763ca6ab707ceb057a62d46a210b4ce

(Eller ikke nogenlunde, den ser sådan ud)...

Den bruges nu til kryptering... det har jeg set eksempler på med filer, men der er det binært... :(
Avatar billede md_craig Nybegynder
03. april 2005 - 12:09 #7
oki... du er "FAST"... :P... kigger lige på det...
Avatar billede arne_v Ekspert
03. april 2005 - 12:20 #8
Hvis det er binær-text som er problem har jeg også et DES eksempel som
konverterer til Base64:

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

class MainClass
{
    public static void Main(string[] args)
    {
        Encoding utf = new UTF8Encoding();
        DES des = new DESCryptoServiceProvider();
        byte[] key = utf.GetBytes("hemmelig");
        byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
        ICryptoTransform encrypt = des.CreateEncryptor(key, iv);
        string plain = "Dette er en lille test";
        Console.WriteLine(plain);
        byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain), 0, utf.GetByteCount(plain));
        string cipherb64 = Convert.ToBase64String(cipher);
        Console.WriteLine(cipherb64);
        ICryptoTransform decrypt = des.CreateDecryptor(key, iv);
        byte[] cipher2 = Convert.FromBase64String(cipherb64);
        string plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher2, 0, cipher.Length));
        Console.WriteLine(plain2);
    }
}
Avatar billede md_craig Nybegynder
03. april 2005 - 12:47 #9
Uhh... det var nok lige præsis noget ala det jeg manglede...

For det skal jo netop gemmes som text (og evt. sendes over Sockets i andre situationer)....
Avatar billede md_craig Nybegynder
03. april 2005 - 12:52 #10
Men så må jeg evt. sørge for at sende længden med når det trods alt skal være 2 forskellige metoder... for Dekrypteringen hænger jo stadig på cipher.Length
Avatar billede md_craig Nybegynder
03. april 2005 - 13:08 #11
eller ikke... Ved ikke lige hvorfor men et kort øjeblik havde den problemer hvis jeg:

string plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher2, 0, cipher2.Length));

det vil den dog pluselig godt nu.. ;/
Avatar billede arne_v Ekspert
03. april 2005 - 13:14 #12
:-)
Avatar billede md_craig Nybegynder
03. april 2005 - 13:23 #13
Du må egentlig godt smide en svar... tror jeg har nok fat i det nu... ;)
Avatar billede md_craig Nybegynder
03. april 2005 - 13:23 #14
hehe
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

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