??????????????????????????????????????????????些????????? ??????????锟�???????????????????屑???????奴?????????????????????????????????????????????????????????????锟�?????????????PHP?械???????????
???????????????????
??????????屑??????(??????????)
???????????????????????????????????????????????????浠�??????????????????????
????MD5
????string md5 ( string $str [?? bool $raw_output = false ] ); //MD5?????????????????????????????32位???
????md5()???????????????????????????????????些??????????????????????????????????;?????????????????????榉�?些????????????????????(salt)?????MD5;
????md5(md5($password).'sdva');
????sdva???????????????????????????md5??????????????????????????????????????????????????????????????????????????;
????Crypt
???????????????????????????????????锌?????????????????????妫�????????;
????string crypt ( string $str [?? string $salt ] ) //????????????????????????????????????????????????????????????PHP????????????????泻???????????????? 13 ??????????????????????????
????<?php
????$password='testtest.com';
????echo crypt($password);
????//???:$1$DZ3.QX2.$CQZ8I.OfeepKYrWp0oG8L1
????/*?????$???????$?????????????PHP????????????伪????
????*/
????echo "<hr>";
????echo crypt($password??"testtest");
????//?????tesGeyALKYm3A
????//????????????????????????????械?testtest?????????????????? ??????位???????????位
????echo "<hr>";
????echo  crypt($password??'$1$testtest$');
????//?????$1$testtest$DsiRAWGTHiVH3O0HSHGoL1
????/*crypt????????卸????????????????????????????MD5????????????梅????
?????????$1$$????????????????械?testtest?????????$?????
??????????位???????????位??????12位;crypt??????????????
????*/
????echo "<hr>";
????//crypt???卸????????????????????
????Sha1?????
????string sha1 ( string $str [?? bool $raw_output = false ]); //??md5???????????sha1()???????路???40?????????????????????????????????????????????????????raw_output????????????false??????????true??sha1()?????????20 位???????????
????<?php
????$my_intro="zhouxiaogang";
????echo sha1($my_intro); // b6773e8c180c693d9f875bcf77c1202a243e8594
????echo "<hr>";
????//?????????????????????????
????echo md5(sha1($my_intro));
????//?????54818bd624d69ac9a139bf92251e381d
????//???????????????????????????????
???????????
????????????????????????????屑???????????????????????????public key???????????????????private key?????????;


?????????????????????梅????????????????????????????
?????????????????????????????????????????????????
????????霉????????????????????????屑???????????????
?????????????????????????????????????????????????薪?????????????????????????????????????????????????
?????????????校???????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????
????????????????????????校?RSA??Elgamal??????????Rabin??D-H??ECC??????????????????? ???????????????RSA??
???????????????????????PHP???openssl????????????
????<?php
????/**
????* ???openssl?????????
????* @since 2010-07-08
????*/
????class Rsa {
????/**
????* private key
????*/
????private $_privKey;
????/**
????* public key
????*/
????private $_pubKey;
????/**
????* the keys saving path
????*/
????private $_keyPath;
????/**
????* the construtor??the param $path is the keys saving path
????*/
????public function __construct($path) {
????if (empty($path) || !is_dir($path)) {
????throw new Exception('Must set the keys save path');
????}
????$this->_keyPath = $path;
????}
????/**
????* create the key pair??save the key to $this->_keyPath
????*/
????public function createKey() {
????$r = openssl_pkey_new();
????openssl_pkey_export($r?? $privKey);
????file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key'?? $privKey);
????$this->_privKey = openssl_pkey_get_public($privKey);
????$rp = openssl_pkey_get_details($r);
????$pubKey = $rp['key'];
????file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key'?? $pubKey);
????$this->_pubKey = openssl_pkey_get_public($pubKey);
????}
????/**
????* setup the private key
????*/
????public function setupPrivKey() {
????if (is_resource($this->_privKey)) {
????return true;
????}
????$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';
????$prk = file_get_contents($file);
????$this->_privKey = openssl_pkey_get_private($prk);
????return true;
????}
????/**
????* setup the public key
????*/
????public function setupPubKey() {
????if (is_resource($this->_pubKey)) {
????return true;
????}
????$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key';
????$puk = file_get_contents($file);
????$this->_pubKey = openssl_pkey_get_public($puk);
????return true;
????}
????/**
????* encrypt with the private key
????*/
????public function privEncrypt($data) {
????if (!is_string($data)) {
????return null;
????}
????$this->setupPrivKey();
????$r = openssl_private_encrypt($data?? $encrypted?? $this->_privKey);
????if ($r) {
????return base64_encode($encrypted);
????}
????return null;
????}
????/**
????* decrypt with the private key
????*/
????public function privDecrypt($encrypted) {
????if (!is_string($encrypted)) {
????return null;
????}
????$this->setupPrivKey();
????$encrypted = base64_decode($encrypted);
????$r = openssl_private_decrypt($encrypted?? $decrypted?? $this->_privKey);
????if ($r) {
????return $decrypted;
????}
????return null;
????}
????/**
????* encrypt with public key
????*/
????public function pubEncrypt($data) {
????if (!is_string($data)) {
????return null;
????}
????$this->setupPubKey();
????$r = openssl_public_encrypt($data?? $encrypted?? $this->_pubKey);
????if ($r) {
????return base64_encode($encrypted);
????}
????return null;
????}
????/**
????* decrypt with the public key
????*/
????public function pubDecrypt($crypted) {
????if (!is_string($crypted)) {
????return null;
????}
????$this->setupPubKey();
????$crypted = base64_decode($crypted);
????$r = openssl_public_decrypt($crypted?? $decrypted?? $this->_pubKey);
????if ($r) {
????return $decrypted;
????}
????return null;
????}
????public function __destruct() {
????@fclose($this->_privKey);
????@fclose($this->_pubKey);
????}
????}