用PHP加密/解密特定数据

时间:2019-12-27 13:58:49

标签: php encryption aes

我是PHP的新手,我正在为大学中的其中一个学科开发Web应用程序。该网络应用程序包含预订自然活动的平台。 我的问题是其中一项要求“加密/解密数据”,在该要​​求中,我需要先对信用卡数据进行加密,然后再将其发送到数据库。 为简单起见,信用卡字段位于预订表中。 这是我的代码:

$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时,所有数据都已加密,我只想加密信用卡数据。 如果有人可以帮助我,我将不胜感激!

3 个答案:

答案 0 :(得分:-1)

看来您只想加密包含与卡相关的数据的字段,例如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”开头。如果是这样,则会对其进行加密。

答案 1 :(得分:-1)

创建要加密的字段列表,然后循环遍历。

$to_encrypt = ['cardName', cardNumber'];

foreach ($to_encrypt as $key ){
    $fieldsReservation[$key] = base64_encode(openssl_encrypt($fieldsReservation[$key], $method, $password, OPENSSL_RAW_DATA, $iv));
}

答案 2 :(得分:-2)

代替

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遍历数组的每个元素,因此它应该对数组的每个元素进行加密。如果要使用数组的一个特定元素,请仅对该数组的一个元素进行操作。