note 84147 added to mcrypt.examples
| From: | jizz at Nowhere | Date: | Tue, 01 Jul 2008 07:36:04 +0000 |
| Subject: | note 84147 added to mcrypt.examples | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-141023@lists.php.net to get a copy of this message | ||
Ok after having a problem using triple des with .net/visual basic with php I think this could help
someone:
Visual Basic 9 with .net 2.0
Encrypting as a stream into the IO/Memory as bytes
Then they get converted back after encryption
I wanted to use base64 encoding to store the VB encryption
The problem I found was ...
I could En/Decrypt within VB and PHP just fine
But when I tried to encrypt one in VB and decrypt in PHP
I got the wrong values with the mcrypt function alone
I found that at least with VB9 that the stream encryption uses a UTF char that is the value for how
many missing bytes left in the 8 bit stream.
So if you encrypt 1234 it will add chr(4) four times (the amount of missing bytes)
In php use chr otherwise most browsers/client cant read it.
Im not good at explaining things but the php code I figured out is below.
It will find the missing bytes on input as visual basic does
and replace as needed. For both encryption and decryption.
Example is triple_des and cbc with self key and iv for storing in base64
$key = "E4HD9h4DhS23DYfhHemkS3Nf";// 24 bit Key
$iv = "fYfhHeDm";// 8 bit IV
$input = "Text to encrypt";// text to encrypt
$bit_check=8;// bit amount for diff algor.
$str= encrypt($input,$key,$iv,$bit_check);
echo "Start: $input - Excrypted: $str - Decrypted: ".decrypt($str,$key,$iv,$bit_check);
function encrypt($text,$key,$iv,$bit_check) {
$text_num =str_split($text,$bit_check);
$text_num = $bit_check-strlen($text_num[count($text_num)-1]);
for ($i=0;$i<$text_num; $i++) {$text = $text . chr($text_num);}
$cipher = mcrypt_module_open(MCRYPT_TRIPLEDES,'','cbc','');
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mcrypt_generic($cipher,$text);
mcrypt_generic_deinit($cipher);
return base64_encode($decrypted);
}
function decrypt($encrypted_text,$key,$iv,$bit_check){
$cipher = mcrypt_module_open(MCRYPT_TRIPLEDES,'','cbc','');
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher,base64_decode($encrypted_text));
mcrypt_generic_deinit($cipher);
$last_char=substr($decrypted,-1);
for($i=0;$i<$bit_check-1; $i++){
if(chr($i)==$last_char){
$decrypted=substr($decrypted,0,strlen($decrypted)-$i);
break;
}
}
return $decrypted;
}
----
Server IP: 209.41.74.194
Probable Submitter: 66.74.12.246
----
Manual Page -- http://www.php.net/manual/en/mcrypt.examples.php
Edit -- https://master.php.net/note/edit/84147
Del: integrated -- https://master.php.net/note/delete/84147/integrated
Del: useless -- https://master.php.net/note/delete/84147/useless
Del: bad code -- https://master.php.net/note/delete/84147/bad+code
Del: spam -- https://master.php.net/note/delete/84147/spam
Del: non-english -- https://master.php.net/note/delete/84147/non-english
Del: in docs -- https://master.php.net/note/delete/84147/in+docs
Del: other reasons-- https://master.php.net/note/delete/84147
Reject -- https://master.php.net/note/reject/84147
Search -- https://master.php.net/manage/user-notes.php