ホームページ  >  記事  >  バックエンド開発  >  PHPでの暗号化と復号化の実装方法と.net_PHPチュートリアル

PHPでの暗号化と復号化の実装方法と.net_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:13:131214ブラウズ

php5.x バージョンでは、php 拡張機能 php_mcrypt を追加します。

PHP バージョン:

コードをコピーします コードは次のとおりです:

class STD3Des
{
private $key = "";
private $iv = "";

/**
*/
function __construct ($key, $iv)
{
if (empty($ key) || empty($iv)) {
echo 'key と iv は無効です';
exit();
}
$this->key = $key;
$iv ;
}

/**
* 暗号化
* @param $value
* @return
*/
public function encrypt ($value)
{
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
$iv = Base64 _decode($this-> ;iv);
$value = $this->PaddingPKCS7($value);
$key =base64_decode($this->key);
mcrypt_generic_init($td, $key, $iv);
$ret = base64_encode(mcrypt_generic($td, $value));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $ret;
}

/**
* 復号化
* @param $value
* @return
*/
パブリック関数復号化 ($value )
{
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
$iv =base64_decode($this->iv);
$key =base64_decode($this->key);
mcrypt_generic_init ($td, $key, $iv);
$ret = trim(mdecrypt_generic($td,base64_decode($value)));
$ret = $this->UnPaddingPKCS7($ret);
mcrypt_generic_deinit($td) );
mcrypt_module_close($td);
return $ret;
}

プライベート関数 PaddingPKCS7 ($data)
{
$block_size = mcrypt_get_block_size('cbc', );
$padding_char = $block_size - ( strlen($data) % $block_size);
$data .= str_repeat(chr($padding_char), $padding_char);
return $data;
}

private function UnPaddingPKCS7($text)
{
$pad = 注文($text{strlen($text) - 1});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
return false;
}
戻るsubstr($text, 0, - 1 * $pad);
}
}


//
include('STD3Des.class.php');
$key='abcdefgh';
$iv='abcdefgh';
$msg='テスト文字列';
$des=new STD3Des( base64_encode($key),base64_encode($iv));
$rs1=$des->encrypt($msg);
echo $rs1.'
';
$rs2=$des-> ;decrypt($rs1);
echo $rs2;

.netバージョン

コードをコピーします コードは次のとおりです:

sealed public class CryptoHelper
{
///
/// 指定された入力を暗号化します。
///

/// 入力.
/// key
/// iv
/// < returns>
public static string EncryptDes(string input, byte[] key, byte[] iv)
{
if (input == null || input.Length == 0)
return String.Empty;

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
MemoryStream ms = null;
CryptoStream encStream = null;
StreamWriter sw = null;
string result = St ring.Empty;

try
{
ms = new MemoryStream();

// メモリ ストリームと
// CSP DES キーを使用して CryptoStream を作成します。 
//des.Mode = CipherMode.CBC;
//des.Padding = PaddingMode.PKCS7; 
encStream = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);

// ストリームに文字列を書き込む StreamWriter を作成します
// sw = 新しい StreamWriter(encStream);

// プレーンテキストをストリームに書き込みます。
sw.Write(input);

sw.Flush();
encStream.FlushFinalBlock();
ms.Flush();


result = Convert.ToBase64String(ms .GetBuffer(), 0, Convert.ToInt32(ms.Length, CultureInfo.InvariantCulture));
}
finally
{
// オブジェクトを閉じる
if (sw != null)
sw.Close();
if ( encStream != null)
encStream.Close();
if (ms != null)
ms.Close();
}

// 暗号化を返しますed 文字列
結果を返します;
}
///
/// 指定された入力を復号化します。
///

/// 入力。
/ // key
/// iv
///
public static string DecryptDes(string input, byte[] key, byte[] iv)
{
byte[]buffer;
try {buffer = Convert.FromBase64String(input); }
catch (System.ArgumentNullException) { return String.Empty; }
// 長さがゼロ、または 4 の偶数倍ではありません (その他の場合もいくつかあります)
catch (System.FormatException) { return String.Empty; }

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
MemoryStream ms = null;
CryptoStream encStream = null;
StreamReader sr = null;
string result = String.Empty;

try
{
ms = 新しい MemoryStream(バッファ) ;

// メモリ ストリームと
// CSP DES キーを使用して CryptoStream を作成します。
encStream = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);

// ストリームを読み取るための StreamReader を作成します。
sr = new StreamReader(encStream);

// ストリームを読む文字列として
result = sr.ReadToEnd();
}
finally
{
// オブジェクトを閉じる
if (sr != null)
sr.Close();
if (encStream != null)
encStream。 Close();
if (ms != null)
ms.Close();
}

return result;
}
}


//调用

string key = "abcdefgh";
string iv = " abcdefgh";
string msg="テスト文字列";
string rs1 = CryptoHelper.EncryptDes(msg, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));
string rs2 = CryptoHelper.DecryptDes(rs1, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326574.html技術記事 php5.x バージョン、php 展 php_mcrypt を追加します。 PHP バージョン: 复制代码 代發如: class STD3Des { private $key = "";プライベート $iv = ""; /** * 构造,传递二个已经进行base...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。