Heim >Backend-Entwicklung >PHP-Tutorial >Ein Artikel, der ausführlich erklärt, wie man die AES-128-CBC-PKCS5Padding-Verschlüsselung in PHP implementiert
Die Anfrage der anderen Partei besteht darin,
die Geschäftsdaten der Schnittstelle zu kodieren und die resultierende Zeichenfolge zu übermitteln sowie den Schlüssel (Schlüssel) und den Initialisierungsvektor (Offset) bereitzustellen, die der Verschlüsselungsmethode entsprechen.AES-128-CBC-PKCS5Padding
加密,然后再做 Base64
Nachdem ich diese Verschlüsselungsmethode zum ersten Mal gesehen hatte, suchte ich in der PHP-Funktionsbibliothek nach einer entsprechenden Verschlüsselungsfunktion. Nachdem ich mich umgesehen hatte, stellte ich fest, dass es keine gab und ich sie später selbst implementieren musste dass ich die mcrypt-Funktionserweiterung verwenden könnte, aber die mcrypt-Funktion wurde seit PHP 7.1.0 aufgegeben. Ich muss nach anderen Verschlüsselungsfunktionsbibliotheken suchen Ich habe herausgefunden, dass dies durch das Verständnis der Funktion „openssl_encrypt“ (verschlüsselte Daten) möglich ist. Bitte lesen Sie das Handbuch für die spezifische Verwendung von „openssl_encrypt“ [Empfehlung:
function encrypt($input, $key, $iv){
return base64_encode(openssl_encrypt($input, 'AES-128-CBC', $key, OPENSSL_RAW_DATA,$iv));
}
// 解密
function decrypt($input, $key, $iv){
return openssl_decrypt(base64_decode($input), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
}
// 测试加密 (我这里用的是json字符串)
$dataJson = '[{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]';
print_r(encrypt($dataJson, $key, $iv));
//u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D
// 测试解密
$strr = 'u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D';
print_r(decrypt($strr, $key, $iv));
// [{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]
Hat den Selbsttest bestanden, lehnte sich zurück und wartete mit stolzem Gesichtsausdruck auf das gemeinsame Debuggen. Dann fing ich an, über andere Geschäfte zu schreiben. Nach ein paar Tagen stellte ich fest, dass die andere Partei nicht entschlüsseln konnte, was ich verschlüsselt hatte, und ich konnte nicht entschlüsseln, was die andere Partei verschlüsselt hatte. Der Verschlüsselungsalgorithmus stimmte nicht überein Nachdem ich bei Google nach verwandten Themen gesucht hatte, fand ich einen Satz: „Die allgemeine Bedeutung ist, dass sich 128 in der aufgegebenen mcrypt-Verschlüsselungsbibliothek tatsächlich auf die Blockgröße und nicht auf die Schlüsselgröße bezieht, in aes-128-cbc in openssl jedoch auf 128.“ Zur Schlüsselgröße, das heißt, wenn gültige 256-Bit-Schlüssel verwendet werden, sind sie alle aes-256, und wenn Sie mcrypt in die Verschlüsselungsmethode von openSL konvertieren möchten, muss mcrypts 128 als openSLs 256 geschrieben werden, also habe ich es geändert Probieren Sie es mit aes-128-cbc aus und testen Sie es schließlich. Die spezifischen technischen Details sind jedoch noch nicht klar Dies und studieren Sie es später, wenn wir Zeit haben
Das obige ist der detaillierte Inhalt vonEin Artikel, der ausführlich erklärt, wie man die AES-128-CBC-PKCS5Padding-Verschlüsselung in PHP implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!