Skip to content

Instantly share code, notes, and snippets.

@kentfredric
Created October 11, 2009 12:24
Show Gist options
  • Save kentfredric/207648 to your computer and use it in GitHub Desktop.
Save kentfredric/207648 to your computer and use it in GitHub Desktop.
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
TRUE f7414b553995cb8c728db3d0912a3ef9
Algorithm MD2 validated successfully
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
TRUE 49586cb2e5f1a5f5929492b6019e4de0
Algorithm MD4 validated successfully
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
TRUE b23cf2d0fb74b0ffa0cf4c70e6e04926
Algorithm MD5 validated successfully
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
TRUE c8499454bada15f6d76bbf8cf133960f93f9b4eb
Algorithm SHA-1 validated successfully
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
TRUE 9cdcfbbe0183b2f1855ee2f7354fb2a8d175b133b227052a095302b4559bf525
Algorithm SHA-256 validated successfully
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
TRUE a266bbf6ba2303d3547a075d79a19b4d74d0775bbd3fcaf5025f46070cde97ad5ef7193ebd304910c60170af569e8286
Algorithm SHA-384 validated successfully
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
TRUE 0c4f22c8d979def2ab3efdfe62f294372d0ec22c69b62334ad58b4306ceed310a0010414205660df0afa6850a1ad201f2b803af58475f18d43c7f0b9fe7777b5
Algorithm SHA-512 validated successfully
FALSE ad4402a8979f8008e7c2d7f18c9b047eaa0c708de44bb11ecfaa534a948c2e3c3a5042354c9eebf30bbbbd5db32c82197de46f29d63eb3f4adb5c3f63d521dec
FALSE ad4402a8979f8008e7c2d7f18c9b047eaa0c708de44bb11ecfaa534a948c2e3c3a5042354c9eebf30bbbbd5db32c82197de46f29d63eb3f4adb5c3f63d521dec
FALSE ad4402a8979f8008e7c2d7f18c9b047eaa0c708de44bb11ecfaa534a948c2e3c3a5042354c9eebf30bbbbd5db32c82197de46f29d63eb3f4adb5c3f63d521dec
FALSE ad4402a8979f8008e7c2d7f18c9b047eaa0c708de44bb11ecfaa534a948c2e3c3a5042354c9eebf30bbbbd5db32c82197de46f29d63eb3f4adb5c3f63d521dec
FALSE cd2bbcc506f4091f2147b0afda48d3b5d3a8d9c0c5a8be2f63ba8516d01d4d09ba324dc6d77e72805dc4b3fb1f6a7799650f2858c981f5a6d5d4a1063d65ed32
FALSE cd2bbcc506f4091f2147b0afda48d3b5d3a8d9c0c5a8be2f63ba8516d01d4d09ba324dc6d77e72805dc4b3fb1f6a7799650f2858c981f5a6d5d4a1063d65ed32
FALSE cd2bbcc506f4091f2147b0afda48d3b5d3a8d9c0c5a8be2f63ba8516d01d4d09ba324dc6d77e72805dc4b3fb1f6a7799650f2858c981f5a6d5d4a1063d65ed32
FALSE cd2bbcc506f4091f2147b0afda48d3b5d3a8d9c0c5a8be2f63ba8516d01d4d09ba324dc6d77e72805dc4b3fb1f6a7799650f2858c981f5a6d5d4a1063d65ed32
FALSE b4d914cc0592cb7684593243e63eab62655f521193044793796431cc03207c0a01c4dfe7f3cc4c9b42525a16c10aa63802ac6bd16080eea6649d703154a54a49
FALSE b4d914cc0592cb7684593243e63eab62655f521193044793796431cc03207c0a01c4dfe7f3cc4c9b42525a16c10aa63802ac6bd16080eea6649d703154a54a49
FALSE b4d914cc0592cb7684593243e63eab62655f521193044793796431cc03207c0a01c4dfe7f3cc4c9b42525a16c10aa63802ac6bd16080eea6649d703154a54a49
FALSE b4d914cc0592cb7684593243e63eab62655f521193044793796431cc03207c0a01c4dfe7f3cc4c9b42525a16c10aa63802ac6bd16080eea6649d703154a54a49
FALSE 7bcf4c36bdf05c9989d468078f5c739c10a331daa0fb8b4e35d4c455fef1f16e079c3c0bbd1ff80c5b966b8c77095fbc40936fff2bd013630c928cb8e342fdda
FALSE 7bcf4c36bdf05c9989d468078f5c739c10a331daa0fb8b4e35d4c455fef1f16e079c3c0bbd1ff80c5b966b8c77095fbc40936fff2bd013630c928cb8e342fdda
FALSE 7bcf4c36bdf05c9989d468078f5c739c10a331daa0fb8b4e35d4c455fef1f16e079c3c0bbd1ff80c5b966b8c77095fbc40936fff2bd013630c928cb8e342fdda
FALSE 7bcf4c36bdf05c9989d468078f5c739c10a331daa0fb8b4e35d4c455fef1f16e079c3c0bbd1ff80c5b966b8c77095fbc40936fff2bd013630c928cb8e342fdda
Algorithm Whirlpool failed validation
#!/usr/bin/perl
use strict;
use warnings;
use DBIx::Class::EncodedColumn::Digest;
# Paraphrased copy of DBIx::Class::EncodedColumn::Digest::make_check_sub
#
my %digest_lengths = (
'MD2' => { base64 => 22, binary => 16, hex => 32 },
'MD4' => { base64 => 22, binary => 16, hex => 32 },
'MD5' => { base64 => 22, binary => 16, hex => 32 },
'SHA-1' => { base64 => 27, binary => 20, hex => 40 },
'SHA-256' => { base64 => 43, binary => 32, hex => 64 },
'SHA-384' => { base64 => 64, binary => 48, hex => 96 },
'SHA-512' => { base64 => 86, binary => 64, hex => 128 },
'CRC-CCITT' => { base64 => 2, binary => 3, hex => 3 },
'CRC-16' => { base64 => 6, binary => 5, hex => 4 },
'CRC-32' => { base64 => 14, binary => 10, hex => 8 },
'Adler-32' => { base64 => 6, binary => 4, hex => 8 },
'Whirlpool' => { base64 => 86, binary => 64, hex => 128 },
'Haval-256' => { base64 => 44, binary => 32, hex => 64 },
);
sub make_check_sub {
my ( $encoder, $args ) = @_;
#this is the digest length
my $len = $digest_lengths{ $args->{algorithm} }{ $args->{format} };
die("Unable to find digest length") unless defined $len;
#fast fast fast
return eval qq^ sub {
my \$col_v = shift;
my \$check = shift;
my \$salt = substr(\$col_v, ${len});
\$encoder->(\$check, \$salt) eq \$col_v;
} ^ || die($@);
}
for my $format (qw( MD2 MD4 MD5 SHA-1 SHA-256 SHA-384 SHA-512 Whirlpool )) {
my @encoders = ();
for ( 0 .. 3 ) {
my $encoder = DBIx::Class::EncodedColumn::Digest->make_encode_sub(
'dummy',
{
format => 'hex',
algorithm => $format,
salt_length => 0,
}
);
my $checker = make_check_sub(
$encoder,
{
algorithm => $format,
format => 'hex',
salt_length => 0,
}
);
push @encoders, [ $encoder, $checker ];
}
my $algo_success = 1;
for ( 0 .. 3 ) {
for (@encoders) {
my $encoded = $_->[0]->( 'asdasd123', '' );
my $check_response = $_->[1]->( $encoded, 'asdasd123' );
if ( not $check_response ){
print "\e[31m FALSE $encoded\e[0m\n";
$algo_success = 0;
} else {
print "\e[37m TRUE $encoded\e[0m\n";
}
}
}
if( $algo_success ){
print "Algorithm $format validated successfully\n";
} else {
print "Algorithm $format failed validation\n";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment