Maison  >  Article  >  développement back-end  >  Méthode de cryptage des données PHP

Méthode de cryptage des données PHP

藏色散人
藏色散人avant
2019-07-31 14:31:217683parcourir

Environnement Apache PHP-7.0.12

Quels problèmes le cryptage résout-il :

1. Empêcher l'écoute clandestine du contenu de la communication ;

2. falsifié

Type de cryptage :

1. Cryptage symétrique : le cryptage et le déchiffrement utilisent la même clé secrète, par exemple : DES (Data Encryption Standard), 1977-1999, Cracké en 1999 ; AES (Advance Encryption Standard), actuellement l'algorithme de cryptage symétrique le plus populaire

2 Cryptage asymétrique : RSA

Cryptage/déchiffrement AES

<.>1. Utilisez la fonction de cryptage/déchiffrement PHP openssl_encrypt/openssl_decrypt

Remarque : Il existe de nombreux exemples utilisant la fonction PHP mcrypt_encrypt(). Le site officiel m'a expliqué : Cette fonction est obsolète depuis PHP 7.1. .0 Il est fortement déconseillé de s'appuyer sur cette fonction.

//获取可用的密码加密算法列表
//$methods = openssl_get_cipher_methods();
//var_dump($methods);
# AES加密演示
//明文(要加密的内容)
$str = "这是测试用例 我是明文";
//秘钥(用例:使用uniqid()函数生成了一个唯一ID)
$key = "5d3fb4acb2292";
//加密算法
$method = "AES-128-CBC";
//加密向量(要求18个字节)
$iv = "1234567812345678";
$encrypt_str = openssl_encrypt($str, $method, $key, 0, $iv);
var_dump("AES加密结果:".$encrypt_str);
# AES解密演示
//$encrypt_str AES加密后产生的密文
//$key 秘钥(同上)
$decrypt_str = openssl_decrypt($encrypt_str, $method, $key, 0, $iv);
var_dump("AES解密结果:".$decrypt_str);

Cryptage RSA

1. Algorithme de chiffrement à clé publique/privée, qui est un cryptage asymétrique :

<.>2. Avantages : extrêmement difficile à cracker ;

3. Inconvénients : vitesse lente, nombre d'opérations élevé, ne convient pas au cryptage de texte long ; méthodes d'interaction dans le projet ----Signature/Vérification

1. Créez un nouveau fichier text.php ------ Générez une signature

//公钥(项目中可在线生产亦可自己生成)
$PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApJJ7D/U9lHLNQdl4LZSr
jNvdCelIraMnSD/iujWxyw/QDLXPCtP06ll42JURGlYaO2DU5c5BKEUF0alyzlE9
XiHRXPl0LabI/CjGtrIB4RApy1PjkQ31QOt+9R2Nmb7RUkfZwnCWHBlNVnwj4U6J
woccrlUdElBWU5twFc2PNPbMR6nA/ldUwDpcveNHNp57BrgYfUFcLrjmf2LH6c7X
ngBNPbG5ha5pmsaXm8MAqBRtAvIwvUsvJLIr+XRc27pCJFe/1MtS4hHhTPE4un/z
Y/tIrpqm6MimdJcs8oqEQPoztfs5BTNu2jVgrKwtWExDXODWmHemQoaCwzgt3wMy
3wIDAQAB
-----END PUBLIC KEY-----";
//私钥(项目中可在线生产亦可自己生成)
$PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCkknsP9T2Ucs1B
2XgtlKuM290J6UitoydIP+K6NbHLD9AMtc8K0/TqWXjYlREaVho7YNTlzkEoRQXR
qXLOUT1eIdFc+XQtpsj8KMa2sgHhECnLU+ORDfVA6371HY2ZvtFSR9nCcJYcGU1W
fCPhTonChxyuVR0SUFZTm3AVzY809sxHqcD+V1TAOly940c2nnsGuBh9QVwuuOZ/
YsfpzteeAE09sbmFrmmaxpebwwCoFG0C8jC9Sy8ksiv5dFzbukIkV7/Uy1LiEeFM
8Ti6f/Nj+0iumqboyKZ0lyzyioRA+jO1+zkFM27aNWCsrC1YTENc4NaYd6ZChoLD
OC3fAzLfAgMBAAECggEAUcCieW7uREwzQr7xQFNWVQbzavUEMZ2W6gEydCYwSBt2
0pmOXGamh7QioBSNBnQ3W7/igrZPD94Z4ek3Kt6YiaZrBrC00ejEdt8at6791/vb
hzIJHgm9B5701nbz3Kg5+5HNzxV2vEalcI0Cle4Z6RSNXtzRMEPQXoAc0ffnZ/tV
033zAN4nWb9zeLw03/D0nbcpaYA/WbwqsNiTxbbi0s54oTsaOTMBBAK9oH9H2M5J
506iINcKniyMi6i0cf/cQ+tP6VUCOMHdWm/zJmQ5s2eU/2SowSKMXMLIGUH2Q4AX
Z2htX4YwvdHGlGA5yPuiMznkFidVcERfbVl9yi54YQKBgQDQYqj2bb0bvD8YuvXx
htdBQrxiX53pZ1sVoh5SMxD+Lq6tpn4UtOJw6tpE7tgONmWRaKCH10fgX5nQoXPJ
0Y02qiDyk/TkE0OGiYRTjjkjY3yPkBIz9KRCoIUcwirEfWdzmjFLTq9hiaGo9JXN
HcLXOgpAbiQe+qXf9x/waWB/hQKBgQDKLQB9Ep9A6UFlumXaEr971A7HcQI2BsfP
kRfCcT1rphnENHCa37o+5i6tTImAXI+aayp9Jpv0rXLbzFbBkdUdUDINulXSsLRT
bq3ttbu5c+NG21XW1fvVqf4VYOP7u/l0Z2eBIsg9uLswS3zltTG8ikm+RKhMf1DV
PDAOoLmMEwKBgDn0po9a9/Rlx5qmLM7OtMFGwUQO2clXYILEwvATmc9HxncvTfOO
V0gWWTxAvUA+qsLlOXhuTGQ/0nSu4pgnusGQUXeF5N8l6Grbhj0C2itYeQUoiZd/
m8uX/01/Rwu84O/K25jZOnfDIn3uAFe6xjy7vKwstckT5txCS9S+SgNNAoGAbvLl
Sr32cUvQXMA+9r7FIHJOLfsBaJ6t9mW8cTNtrm63wym4BfXzImN1iBrxdmTVVbur
1IRkn5Cz8JUhoxahqnWBEnGIeZgJTaP2hPXvcCV9uzvQzpYdnrKsQhUq59HPYqcA
cSiiVOTUrPswLmsSQVJuh6Dr7xcLSAnAobZoPMsCgYEAsJuY5RcB1sjYortRNsKb
KHLiLI93P0MFF46V/343d3BU7TZfETg703Mj2AfOAGTM2p2BkHFri3l+4oigMqpr
hAp4hNq4KFK2SCjzedrLV7QIgtp/uMZ+q/yhRtiG8kSWlI9c0Un00+KqIwFqfwAB
l1zOX5QcMa1X7eWSvZ559ko=
-----END PRIVATE KEY-----";
//待加密明文
$data = "这是RSA待加密明文";
//用于接收加密后的密文
$content_encrypt = "";
 # 私钥加密
openssl_private_encrypt($data, $content_encrypt, $PRIVATE_KEY, 1);
var_dump("私钥加密结果:".$content_encrypt);
 # 公钥解密
//$content_encrypt 私钥加密后的密文
//用于接收解密后的明文
$content_decrypt = "";
openssl_public_decrypt($content_encrypt, $content_decrypt, $PUBLIC_KEY, 1);
var_dump("公钥解密结果:".$content_decrypt);
2. obtenu à partir du fichier text.php pour accéder au fichier text_sig.php du serveur ------- Vérifier la signature
//根军 MD5()函数的不可逆性进行签名校验
//首先必须要有 $appKey与$secretKey
$appKey = "5d3fb4acb2292";
$secretKey = "5d3fb4acb22925d3fb4acb22925d3fb4acb2292";
$url = "localhost/text_sig.php";
//待传递的参数
$params[&#39;appKey&#39;] = $appKey;
$params[&#39;name&#39;] = "张三";
$params[&#39;age&#39;] = "26";
$params[&#39;sex&#39;] = "男";
$params[&#39;root&#39;] = "admin";
$params[&#39;password&#39;] = "123456";
$params[&#39;time&#39;] = time();
//获取签名
$params[&#39;sig&#39;] = createSig($params,$secretKey);
$param_str = http_build_query($params);
$url = $url.&#39;?&#39;.$param_str;
var_dump($url);
//生成签名
function createSig($params,$secretKey){
    //对参数进行排序
    ksort($params);
    $str = http_build_query($params);
    $str .= $secretKey;
    return md5($str);
}

Remarque : les notes ci-dessus ne sont que des notes d'étude, elles sont donc relativement simples et peu rigoureuses. assez.

1. L'utilisation doit être optimisée dans les projets réels

2. Il est préférable d'utiliser les méthodes de cryptage AES et RSA en conjonction avec la vérification de la signature pour empêcher l'écoute et la falsification de la clé secrète ; avec pendant le processus d'interaction

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer