Thread [Crypt-CTR] AES mit CTR oder doch nicht? (18 answers)
Opened by thecoder2012 at 2013-02-04 06:57

thecoder2012
 2013-02-04 06:57
#165407 #165407
User since
2013-02-04
64 Artikel
BenutzerIn
[default_avatar]
Ich selbst möchte Daten mit AES CTR mit Perl decrypten. Ein funktionierender Quellcode liegt in PHP vor und bisher sind alle Versuche in Perl in der Richtung gescheitert. Es wurde auf Windows mit Perl 5.10 (32-Bit) und Debian Linux 6 mit Perl 5.14.2 probiert.

Situation ein Server sendet in PHP generiert einen Datenstrom an einen anderen Server wo es empfangen werden soll. Mag wenn möglich wenigstens für den Decrypt Perl (mit SpeedyCGI/Lighttpd) einsetzen um am Ende PHP vom kontrollierten Server löschen/deaktivieren zu können. Auf den Server wo es generiert wird, kann ich leider keinen Einfluss nehmen.

Testdaten AES CTR (256):
Key: Ready to Have Some Fun
Encrypt: DzQPUdLS0tKCWf9U6V/UDB3aQEUWCQ==
Decrypt: perl prototype

1. Modul Crypt-CTR
Code (perl): (dl )
1
2
3
4
5
6
#!/usr/bin/env perl
use Crypt::Ctr;
my $aeskey = 'Ready to Have Some Fun';
my $input = 'DzQPUdLS0tKCWf9U6V/UDB3aQEUWCQ==';
my $cipher = new Crypt::Ctr $aeskey, 'Crypt::Rijndael';
print $cipher->decrypt($input) . "\n";

Erscheint beim Versuch folgende Fehlermeldung:
Error:wrong key length: key must be 128, 192 or 256 bits long at C:/Perl/site/lib/Crypt/CFB.pm line 135.
Grundsätzlich gibt es bei Rijndael scheinbar das Problem mit dem Key und dessen recht feste Länge.

2. Modul Crypt::Nettle::Cipher
Code (perl): (dl )
1
2
3
4
5
6
7
#!/usr/bin/env perl
use Crypt::Nettle::Cipher;
my $aeskey = 'Ready to Have Some Fun';
my $input = 'DzQPUdLS0tKCWf9U6V/UDB3aQEUWCQ==';
my $cipher = Crypt::Nettle::Cipher->new('decrypt', 'aes256', $aeskey, 'ctr');
$ciphertext = $cipher->process($input);
print $ciphertext . "\n";

Scheint ein ähnliches Problem wie Modul 1 zu haben.
perl: aes-set-encrypt-key.c:57: nettle_aes_set_encrypt_key: Assertion `keysize >= 16' failed.

3. CryptoKäse - Versuch AES/AES-CTR in pure Perl umzusetzen
Siehe Anhang aes.pl bzgl. Modul 3
Fehler "Out of memory!" aber konnte den genauen Grund bisher nicht finden.
Ohne ein Aufruf sind mir noch die beiden Fehlermeldungen Illegal modulus zero und Integer overflow in hexadecimal number begegnet, wo ich nicht wusste, wie man es in Perl scheinbar schreiben muss. Hab den jeweiligen Fehler im Code als Kommentar hinterlegt.
UPDATE 1: Siehe msg #165456

Das PHP Skript stammt von http://www.movable-type.co.uk/scripts/aes-php.html (aes.class.php und aesctr.class.php) mit folgendem funktionierenden Aufruf:
more (734b):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
<?php
require 'aes.class.php'; // AES PHP implementation
require 'aesctr.class.php'; // AES Counter Mode implementation

$nBits = 256;
$password = 'Ready to Have Some Fun';
$ciphertext = 'DzQPUdLS0tKCWf9U6V/UDB3aQEUWCQ==';

$obj = new AesCtr;
echo $obj->decrypt($ciphertext, $password, $nBits) . "\n";
?>

Das ganze existiert funktionierend auch noch in Python unter http://wiki.birth-online.de/snippets/python/aes-ri... , JavaScript unter http://www.movable-type.co.uk/scripts/aes.html bzw. http://sourceforge.net/projects/pidcrypt/ und das PDF Dokument unter http://csrc.nist.gov/publications/nistpubs/800-38a...

EDIT - LÖSUNG: CPAN:Crypt::AES::CTR
Anhänge

Last edited: 2013-10-08 20:51:55 +0200 (CEST)

View full thread [Crypt-CTR] AES mit CTR oder doch nicht?