文字

范例

Mcrypt 支持使用上述的算法来进行加密和解密。 如果你使用 libmcrypt-2.2.x 链接编译 PHP, 通过使用最重要的四个函数( mcrypt_cfb() mcrypt_cbc() , mcrypt_ecb() , 和 mcrypt_ofb() ) 以及 MCRYPT_ENCRYPT and MCRYPT_DECRYPT 来对数据进行加解密。

如果你使用 libmcrypt 2.4.x 或者 2.5.x 版本,以上函数依然可用。 但是建议使用新版本提供的更先进的函数。

Example #1 在 2.4.x 或更高版本,使用 256 比特的密钥,AES 算法和 CBC 模式来加密输入数据

<?php
    $key 
hash ( 'sha256' 'this is a secret key' true );
    
$input  "Let us meet at 9 o'clock at the secret place." ;
    
    
$td  mcrypt_module_open ( 'rijndael-128' '' 'cbc' '' );
    
$iv  mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ),  MCRYPT_DEV_URANDOM );
    
mcrypt_generic_init ( $td $key $iv );
    
$encrypted_data  mcrypt_generic ( $td $input );
    
mcrypt_generic_deinit ( $td );
    
mcrypt_module_close ( $td );
?>
本例程将加密后的数据以字符串格式存储于 $encrypted_data 变量。 完整例程请参见 mcrypt_module_open()

用户评论:

[#1] ivoras at gmail dot com [2010-08-30 06:36:42]

Note that there can be standard padding in block modes:

http://www.di-mgt.com.au/cryptopad.html

[#2] jizz @ Nowhere [2008-07-01 00:36:04]

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;
}

上一篇: 下一篇: