Encrypt/Decrypt PHP 中的特定数据
Encrypt/Decrypt specific data in PHP
我是 PHP 的新手,我正在为我大学的一门学科开发网络应用程序。该网络应用程序包含在预订自然活动的平台中。
我的问题出在其中一项要求 "encrypt/decrypt data" 中,我需要在信用卡数据进入数据库之前对其进行加密。
为简单起见,信用卡字段位于预订 table 中。
这是我的代码:
$fieldsReservation = array(
'idUser' => $idUser,
'idActivity' => $idActivity,
'reservationDate' => $reservationDate,
'state' => 'reserved',
'cardName' => $cardName,
'cardType' => $cardType,
'cardNumber' => $cardNumber,
'cardExpiry' => $cardExpiry,
'cardCVV' => $cardCVV);
$password = '3sc3RLrpd17';
$method = 'aes-256-cbc';
// password must be exact 32 chars (256 bit)
$password = substr(hash('sha256', $password, true), 0, 32);
// IV must be exact 16 chars (128 bit)
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
foreach ($fieldsReservation as $key => $value){
$fieldsReservation[$key] = base64_encode(openssl_encrypt($value, $method, $password, OPENSSL_RAW_DATA, $iv));
}
我已经尝试过使用 foreach
,但是使用 foreach
,所有数据都已加密,我只想加密信用卡数据。
如果有人能帮助我,我将不胜感激!
而不是
foreach ($fieldsReservation as $key => $value){
$fieldsReservation[$key] = base64_encode(openssl_encrypt($value, $method, $password, OPENSSL_RAW_DATA, $iv));
}
只需使用
$fieldsReservation['cardNumber'] = base64_encode(openssl_encrypt($fieldsReservation['cardNumber'], $method, $password, OPENSSL_RAW_DATA, $iv));
foreach 遍历数组的每个元素,因此它应该加密数组的每个元素。如果你想使用数组的一个特定元素,只对数组的那个元素做一些事情。
您似乎只想加密包含卡相关数据的字段,例如 cardName
、cardType
、cardNumber
等。如何:
foreach ($fieldsReservation as $key => $value){
if (substr($key, 0, 4) == "card") {
$fieldsReservation[$key] =
base64_encode(openssl_encrypt($value, $method, $password, OPENSSL_RAW_DATA, $iv));
}
}
通过查看每个键,代码检查它是否以 "card" 开头。如果是这样,它就会被加密。
创建一个要加密的字段列表,然后遍历它。
$to_encrypt = ['cardName', cardNumber'];
foreach ($to_encrypt as $key ){
$fieldsReservation[$key] = base64_encode(openssl_encrypt($fieldsReservation[$key], $method, $password, OPENSSL_RAW_DATA, $iv));
}
我是 PHP 的新手,我正在为我大学的一门学科开发网络应用程序。该网络应用程序包含在预订自然活动的平台中。 我的问题出在其中一项要求 "encrypt/decrypt data" 中,我需要在信用卡数据进入数据库之前对其进行加密。 为简单起见,信用卡字段位于预订 table 中。 这是我的代码:
$fieldsReservation = array(
'idUser' => $idUser,
'idActivity' => $idActivity,
'reservationDate' => $reservationDate,
'state' => 'reserved',
'cardName' => $cardName,
'cardType' => $cardType,
'cardNumber' => $cardNumber,
'cardExpiry' => $cardExpiry,
'cardCVV' => $cardCVV);
$password = '3sc3RLrpd17';
$method = 'aes-256-cbc';
// password must be exact 32 chars (256 bit)
$password = substr(hash('sha256', $password, true), 0, 32);
// IV must be exact 16 chars (128 bit)
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
foreach ($fieldsReservation as $key => $value){
$fieldsReservation[$key] = base64_encode(openssl_encrypt($value, $method, $password, OPENSSL_RAW_DATA, $iv));
}
我已经尝试过使用 foreach
,但是使用 foreach
,所有数据都已加密,我只想加密信用卡数据。
如果有人能帮助我,我将不胜感激!
而不是
foreach ($fieldsReservation as $key => $value){
$fieldsReservation[$key] = base64_encode(openssl_encrypt($value, $method, $password, OPENSSL_RAW_DATA, $iv));
}
只需使用
$fieldsReservation['cardNumber'] = base64_encode(openssl_encrypt($fieldsReservation['cardNumber'], $method, $password, OPENSSL_RAW_DATA, $iv));
foreach 遍历数组的每个元素,因此它应该加密数组的每个元素。如果你想使用数组的一个特定元素,只对数组的那个元素做一些事情。
您似乎只想加密包含卡相关数据的字段,例如 cardName
、cardType
、cardNumber
等。如何:
foreach ($fieldsReservation as $key => $value){
if (substr($key, 0, 4) == "card") {
$fieldsReservation[$key] =
base64_encode(openssl_encrypt($value, $method, $password, OPENSSL_RAW_DATA, $iv));
}
}
通过查看每个键,代码检查它是否以 "card" 开头。如果是这样,它就会被加密。
创建一个要加密的字段列表,然后遍历它。
$to_encrypt = ['cardName', cardNumber'];
foreach ($to_encrypt as $key ){
$fieldsReservation[$key] = base64_encode(openssl_encrypt($fieldsReservation[$key], $method, $password, OPENSSL_RAW_DATA, $iv));
}