Re: [PHP] Re: web-based and command line mcrypting and back again
Hi, Wednesday, January 7, 2004, 8:54:16 AM, you wrote: GCN Tom, GCN I appreciate the suggestion, but even after setting the iv to zero GCN within the php code and including the --noiv option within the command GCN line; it still does not produce the same base64 encoded string under GCN both methods. GCN I noticed that the command line was keying off of 2 passphrases and the GCN php code off of only 1, so I forced the command line to key off of only GCN 1 passphrase--to no avail. GCN I am obviously missing something. Someone out there has had to have GCN done this at least once before. GCN Any other suggestions would be appreciated. GCN Respectfully, GCN Gary The only way I could get it to work was using an encryption class of mine and a php command line script. The mycrpt command line just didn't get it right. Here is what I did ?php $key = 'test'; $data[] = 'abcdefghijklmnopqrstuvwxyz'; $m = 0; class encrypt_class{ var $secret; function encrypt_class(){ $this-secret = 'test'; } Function encode($id){ $eid = $iv = 0; $len = strlen($id); $id = $len.'-'.$id; $td = mcrypt_module_open(MCRYPT_TripleDES, , MCRYPT_MODE_ECB, ); $key = substr($this-secret, 0, mcrypt_enc_get_key_size ($td)); $iv = pack(a.mcrypt_enc_get_iv_size($td),$iv); mcrypt_generic_init ($td, $key, $iv); $eid = base64_encode(mcrypt_generic ($td, $id)); mcrypt_generic_deinit($td); return $eid; } Function decode($eid){ $id = $iv = 0; $td = mcrypt_module_open (MCRYPT_TripleDES, , MCRYPT_MODE_ECB, ); $key = substr($this-secret, 0, mcrypt_enc_get_key_size ($td)); $iv = pack(a.mcrypt_enc_get_iv_size($td),$iv); mcrypt_generic_init ($td, $key, $iv); $id = mdecrypt_generic ($td, base64_decode($eid)); $len = strtok($id,'-'); $id = substr($id,(strlen($len)+1),$len); mcrypt_generic_deinit($td); return $id; } } $code = new encrypt_class(); foreach ($data as $dt) { $CRYPT[$m] = $code-encode($dt); $DECRYPT[$m] = $code-decode($CRYPT[$m]); echo crypt_.$CRYPT[$m]._br /\n; echo decrypt_.$DECRYPT[$m]._br /\n; $m++; } ? shell script decode.php 'encrypted string' #!/usr/bin/php ? Function decode($eid){ $secret = 'test'; $id = $iv = 0; $td = mcrypt_module_open (MCRYPT_TripleDES, , MCRYPT_MODE_ECB, ); $key = substr($secret, 0, mcrypt_enc_get_key_size ($td)); $iv = pack(a.mcrypt_enc_get_iv_size($td),$iv); mcrypt_generic_init ($td, $key, $iv); $id = mdecrypt_generic ($td, base64_decode($eid)); $len = strtok($id,'-'); $id = substr($id,(strlen($len)+1),$len); mcrypt_generic_deinit($td); return $id; } echo decode($argv[1]) ? -- regards, Tom -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] Re: web-based and command line mcrypting and back again
Tom, I appreciate the suggestion, but even after setting the iv to zero within the php code and including the --noiv option within the command line; it still does not produce the same base64 encoded string under both methods. I noticed that the command line was keying off of 2 passphrases and the php code off of only 1, so I forced the command line to key off of only 1 passphrase--to no avail. I am obviously missing something. Someone out there has had to have done this at least once before. Any other suggestions would be appreciated. Respectfully, Gary Tom Rogers wrote: Hi, Tuesday, January 6, 2004, 8:48:17 PM, you wrote: GCN I am trying to figure out how to encrypt data using the web-based php GCN mcrypt function and then decrypt it using the command line (cli) mcrypt GCN binary, and vica-versa. GCN I cannot seem to get the same encrypted output for the same data, GCN between the two methods. I've tried to ensure I am using the same GCN algorithms and modes for both methods by testing the mcrypt_enc_get_* GCN functions. I think the problem may lie in the way both methods are GCN being seeded. GCN Web-Based PHP Example: GCN $key = 'test'; GCN $data[] = 'abcdefghijklmnopqrstuvwxyz'; GCN $m = 0; GCN foreach ($data as $dt) GCN { GCN $td = mcrypt_module_open('tripledes', '', 'ecb', ''); GCN $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); GCN mcrypt_generic_init($td, $key, $iv); GCN $CRYPT[$m] = mcrypt_generic($td, $dt); GCN /* GCN echo mcrypt_enc_get_algorithms_name($td); GCN echo mcrypt_enc_get_block_size($td); GCN echo mcrypt_enc_get_iv_size($td); GCN echo mcrypt_enc_get_key_size($td); GCN echo mcrypt_enc_get_modes_name($td); GCN echo mcrypt_enc_get_supported_key_sizes($td); GCN echo mcrypt_enc_is_block_algorithm_mode($td); GCN echo mcrypt_enc_is_block_algorithm($td); GCN echo mcrypt_enc_is_block_mode($td); GCN echo mcrypt_enc_self_test($td); GCN */ GCN $DECRYPT[$m] = mdecrypt_generic($td, $dt); GCN mcrypt_generic_deinit($td); GCN mcrypt_module_close($td); GCN echo crypt_ . base64_encode($CRYPT[$m]) . _br /\n; GCN echo decrypt_ . base64_decode(rtrim($DECRYPT[$m])) . _br /\n; GCN $m++; GCN } GCN Note: I believe it is the line where the $iv variable is being set that GCN is causing the issue and/or I cannot reproduce the same seeding using GCN the command line options. GCN Command Line Example: GCN echo abcdefghijklmnopqrstuvwxyz | mcrypt -Fb -m ecb -a tripledes | GCN encode-base64 GCN echo | decode-base64 | mcrypt -dFb -m ecb -a tripledes GCN I would appreciate any comments or suggestions. GCN Respectfully, GCN Gary try setting the iv to all 0's $iv = 0; $iv = pack(a.mcrypt_enc_get_iv_size($td),$iv); -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php