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 遍历数组的每个元素,因此它应该加密数组的每个元素。如果你想使用数组的一个特定元素,只对数组的那个元素做一些事情。

您似乎只想加密包含卡相关数据的字段,例如 cardNamecardTypecardNumber 等。如何:

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));
}