PHPでの暗号化と復号化の実装方法と.net_PHPチュートリアル
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
* @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
* @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));

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
