Avatar billede nielsbrinch Nybegynder
07. oktober 2003 - 17:46 Der er 24 kommentarer og
1 løsning

Toolkit eller framework til Kryptering med DES

Nogen der kan anbefale mig et toolkit eller framework i C++ til kryptering med DES. Mere eller mindre noget der giver mig mulighed for at angive en nøgle og en tekst som så krypteres/dekrypteres med en standard 64 bit DES Engine.
Avatar billede arne_v Ekspert
07. oktober 2003 - 17:59 #1
libdes / Eric Young

ftp://ftp.psy.uq.oz.au/pub/Crypto/DES

Har selv brugt det i flere forskellige versioner med success.

(det er C ikke C++ men det er vel næppe et problem)
Avatar billede arne_v Ekspert
07. oktober 2003 - 18:01 #2
PS: DES opererer på 64 bit enheder, men key er kun 56 bit ikke 64 bit.
Avatar billede nielsbrinch Nybegynder
07. oktober 2003 - 18:02 #3
Det framework jeg har på Java tager imod en key på 8 bogstaver - er det ikke 64 bit?
Avatar billede arne_v Ekspert
07. oktober 2003 - 18:07 #4
Jo, men DES bruger kun 56 ud af de 64. De sidste 8 (least significant bit
i hver byte) bruges normalt til paritet.
Avatar billede nielsbrinch Nybegynder
07. oktober 2003 - 18:28 #5
ok, ved ikke lige hvad det er - men bare det virker
Avatar billede nielsbrinch Nybegynder
07. oktober 2003 - 18:29 #6
Må man i øvrigt bruge det til kommercielle programmer? Kender du et sted hvor jeg evt. kan se licensaftale osv.?
Avatar billede arne_v Ekspert
07. oktober 2003 - 18:34 #7
Læs i toppen af des.h !
Avatar billede arne_v Ekspert
07. oktober 2003 - 18:35 #8
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to.  The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code.  The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
*    must display the following acknowledgement:
*    "This product includes cryptographic software written by
*    Eric Young (eay@cryptsoft.com)"
*    The word 'cryptographic' can be left out if the rouines from the library
*    being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
*    the apps directory (application code) you must include an acknowledgement:
*    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed.  i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
Avatar billede arne_v Ekspert
07. oktober 2003 - 18:35 #9
Hvilket vist er en Apache style licens.

Man kan bruge koden til hvad man vil. Men er nødt til at give dem credit.
Avatar billede arne_v Ekspert
07. oktober 2003 - 18:37 #10
Hvis det er et problem, så er der sikkert andre libs.

Men dette er et af de mest brugte. Det er så vidt jeg ved det der
bruges i OpenSSL.
Avatar billede nielsbrinch Nybegynder
07. oktober 2003 - 18:54 #11
Du skal have mange tak for din generøse hjælp - vidste slet ikke du eksisterede uden for Java-kategorien :D
Avatar billede arne_v Ekspert
07. oktober 2003 - 18:57 #12
Jeg huserer også i C/C++ kategorien.
Avatar billede nielsbrinch Nybegynder
09. oktober 2003 - 14:50 #13
Æv, det virker ikke på samme måde som det Java-framework jeg bruger fra www.bouncycastle.org - de er begge DES (ikke 3DES), så burde de da virke på samme måde. Ikke?
Avatar billede arne_v Ekspert
09. oktober 2003 - 14:59 #14
Det lyder lidt mystisk.

Jeg har tidligere haft libdes til at snakke med både Baltimore jcrypto DES
og standard JCE DES.
Avatar billede arne_v Ekspert
09. oktober 2003 - 17:07 #15
Kan du beskrive hvordan det går galt lidt mere præcist ?

(hvorfor bruger du iøvrigt bouncycastle til DES - det er en af de
algoritmer som standard SUN JCE har)
Avatar billede nielsbrinch Nybegynder
09. oktober 2003 - 17:16 #16
Det er til en J2ME-applikation.

Der går det galt at når jeg encrypt'er med BouncyCastle og UUEncoder (base64) og jeg efterfølgende UUDecoder (igen med base64) og dekrypterer med libdes, giver den ikke det rigtige resultat.
Avatar billede arne_v Ekspert
09. oktober 2003 - 17:20 #17
Totalt garbage eller kun de sidste bytes ?

Har du checket at det ikke er undervejs det går galt ? (ved f.eks.
at teste det standalone)
Avatar billede nielsbrinch Nybegynder
10. oktober 2003 - 11:22 #18
Jeg tror nok jeg fandt ud af fejlen var at der blev brugt forskellig byte-encoding. Jeg brugte default det ene sted og vistnok UTF-8 det andet sted. Så ved du det :D

(alle de måske'er er fordi det er en anden der sidder og tester på C++ delen)

Tak for din generøse hjælp.
Avatar billede nielsbrinch Nybegynder
24. oktober 2003 - 10:52 #19
Avatar billede nielsbrinch Nybegynder
27. oktober 2003 - 11:27 #20
arne_v: Du nævnte libdes kan bruges med Baltimore jcrypto DES
og Standard JCE DES. Kan du give mig url's til hvor jeg kan læse om dem eller hente source'n. Er Standard JCE DES bare en fra J2SE?
Avatar billede arne_v Ekspert
27. oktober 2003 - 12:03 #21
Baltimore JCrypto er et kommercielt produkt.

JCE er med i J2SE 1.4 og nyere - det kan downloades separat
til 1.3 fra java.sun.com !
Avatar billede arne_v Ekspert
27. oktober 2003 - 12:05 #22
Jeg lavede engang det her eksempel som bruger SUN's JCE:

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

public class DES {
    private Cipher des;
    private SecretKey deskey;
    public DES(String key) {
        try {
            Security.addProvider(new com.sun.crypto.provider.SunJCE());
            des = Cipher.getInstance("DES/ECB/PKCS5Padding");
            deskey = new SecretKeySpec(key.getBytes(), "DES");
        } catch(Exception e) {
        }
    }
    private byte[] encrypt(byte[] plaindata) throws Exception {
        des.init(Cipher.ENCRYPT_MODE, deskey);
        return des.doFinal(plaindata);
    }
    private byte[] decrypt(byte[] cipherdata) throws Exception {
        des.init(Cipher.DECRYPT_MODE, deskey);
        return des.doFinal(cipherdata);
    }
    public static void main(String[] args) throws Exception {
        DES ec = new DES("hemmelig");
        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 arne_v Ekspert
27. oktober 2003 - 12:06 #23
Jeg har i arbejdsmæssig sammenhæng brugt libdes op mod Baltimore
JCrypto og SUN JCE.

Og det virker.

Hvis nødvendigt kan jeg godt lave et eksempel. Men jeg kan ikke
poste den kode.
Avatar billede arne_v Ekspert
27. oktober 2003 - 12:07 #24
(altså den kode som jeg har brugt arbejdsmæssigt)
Avatar billede nielsbrinch Nybegynder
27. oktober 2003 - 12:28 #25
Nej det er klart du ikke kan poste koden fra dit arbejde. Du har været en stor hjælp - jeg burde sende dig halvdelen af min løn (men det gør jeg ikke)
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
Kurser inden for grundlæggende programmering

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