我是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
时,所有数据都已加密,我只想加密信用卡数据。
如果有人可以帮助我,我将不胜感激!
答案 0 :(得分:-1)
看来您只想加密包含与卡相关的数据的字段,例如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”开头。如果是这样,则会对其进行加密。
答案 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遍历数组的每个元素,因此它应该对数组的每个元素进行加密。如果要使用数组的一个特定元素,请仅对该数组的一个元素进行操作。