Функции Perl Blowfish / CBC для шифрования и дешифрования - PullRequest
0 голосов
/ 11 декабря 2018

Новое в Perl и криптографии здесь.У кого-нибудь есть какие-нибудь простые функции шифрования / дешифрования (используя Blowfish или CBC), которые инкапсулируют всю грязную работу под капотом?Я хочу иметь один фиксированный ключ для использования и иметь возможность передавать строку любой для шифрования.

Для ясности я хочу зашифровать учетные данные, используяЗашифруйте функцию, сохраните результат где-нибудь и расшифруйте его при необходимости ... все время, используя один и тот же ключ.

Я в основном хочу сделать это:

$fixedKey = "0123456789ABCDEF";
$plainText = "A string of any length..........";

$encryptedString = Encrypt($fixedKey, $plainText); 

$retrievedText = Decrypt($fixedKey, $encryptedString);

Оценили.

1 Ответ

0 голосов
/ 11 декабря 2018

Следующее использует Crypt :: CBC для соления, заполнения и сцепления, и оно использует Crypt :: Rijndael (AES) для шифрования.

use strict;
use warnings;
use feature qw( say );
use Crypt::CBC qw( );

sub encrypt {
   my ($key, $plaintext) = @_;

   my $iv = Crypt::CBC->random_bytes(16);

   my $cipher = Crypt::CBC->new(
      -cipher      => 'Rijndael',
      -literal_key => 1,
      -key         => $key,
      -iv          => $iv,
      -header      => 'none',
   );

   return $iv . $cipher->encrypt($plaintext);
}

sub decrypt {
   my ($key, $ciphertext) = @_;

   my $iv = substr($ciphertext, 0, 16, '');

   my $cipher = Crypt::CBC->new(
      -cipher      => 'Rijndael',
      -literal_key => 1,
      -key         => $key,
      -iv          => $iv,
      -header      => 'none',
   );

   return $cipher->decrypt($ciphertext);
}

{
   my $key = Crypt::CBC->random_bytes(32);
   say "Key: ", unpack "H*", $key;

   my $expect = 'secret';
   say "Plaintext: $expect";

   my $ciphertext = encrypt($key, $expect);
   say "Ciphertext: ", unpack "H*", $ciphertext;

   my $got = decrypt($key, $ciphertext);
   say "Plaintext: $got";
   say $expect eq $got ? "ok" : "not ok";
}
...