PGP/GPG 信息加密介绍

前言

由于某些项目需求,我们需要对敏感资料进行加密处理。

PGP 指的是啥?它是个软件,Symantec旗下的商业产品。

PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件。可以用它对邮件保密以防止非授权者阅读,它还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。它可以提供一种安全的通讯方式,而事先并不需要任何保密的渠道用来传递密匙。它采用了一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。它的功能强大,有很快的速度。而且它的源代码是免费的。

OpenPGP 是一个加/解密标准

由于加/解密的需求太多了,所以也有一个开源的实现了PGP相同功能的项目叫 GPGGnuPG),他们都完整实现了 OpenPGP 的标准(RFC 4880)。

我们平时说的PGP可能也指 OpenPGP 这个加/解密标准。

就是这样我们就搞清楚 GPG / PGP / OpenPGP 的关系了,GPG / PGP 都是一个软件集,都是实现了OpenPGP 的标准, GPG是开源项目,而 PGP 就是一个商业软件。

原理及构成

请自行Google……我也懒得搬砖。

主要是通过一组密匙与公匙 处理加/解密;匙用于加密消息,密匙用于解密消息。

就是说你只需要提供匙给对方就可以将消息加密,而只有拥有密匙的用户才可以解密消息。


PHP的GPG加密

PHP 有 GnuPG的扩展,可以高效的处理消息的加/解密,不过这个扩展,暂时没有Window下的dll,只能在Linux环境玩。

<?php 
putenv("GNUPGHOME=/tmp"); 
// 加载公匙内容 
$publicKey = file_get_contents(__DIR__ . '/your.pub.pem'); 
//创建 gnupg 实例 
$gpg = new gnupg(); 
$gpg->seterrormode(gnupg::ERROR_EXCEPTION); 
//将公匙加载到实例 
$info = $gpg->import($publicKey); 
//添加公匙的指纹 
$gpg->addencryptkey($info['fingerprint']); 
//加载需要加密的文件内容 
$uploadFileContent = file_get_contents(__DIR__ . '/Input xml sample v1.1'); 
//加密消息 
$enc = $gpg->encrypt($uploadFileContent); 
//将加密后的消息保存成文本 
file_put_contents(__DIR__ . '/Input xml sample v1.1.gpg', $enc);

加密前的文件

<?xml version='1.0' encoding='utf-8'?>
<policy>
<general_info>
  <quote_no>QAA-DC-12345</quote_no>
  <quote_dt>15/04/2015 13:45:30</quote_dt>
  <quote_expry_dt>30/05/2015 23:59:59</quote_expry_dt>
  <cvr_nt_no>DC-AA-1234567</cvr_nt_no>
  <cvr_nt_no_vsrn>1</cvr_nt_no_vsrn>
  <cvr_nt_eff_dt>16/04/2015 00:00:00</cvr_nt_eff_dt>
  <cvr_nt_isrd_dt>30</cvr_nt_isrd_dt>
  <cvr_nt_expry_dt>15/05/2015 23:59:59</cvr_nt_expry_dt>
  <cvr_nt_stts>IS</cvr_nt_stts>
  <prvs_endt_srl></prvs_endt_srl>
  <doc_receive_date></doc_receive_date>
  <print_lang>EN</print_lang>
  <no_of_nm_drvr>3</no_of_nm_drvr>
  <account_no>1415</account_no>  
</general_info>  
  <proposer_info>
    <id_typ>I</id_typ>
    <id_no>V123456(7)</id_no>
    <cust_typ>1</cust_typ>
    <isrd_com_nm></isrd_com_nm>
    <occupation>DIRECTOR</occupation>
    <occupation_class>N</occupation_class>
    <isrd_title>MR.</isrd_title>
    <isrd_lst_nm>SO</isrd_lst_nm>
    <isrd_fst_nm>LAI SAI</isrd_fst_nm>
    <isrd_nm>SO LAI SAI</isrd_nm>
    <sex>M</sex>
    <dob>01/01/1975</dob>
    <licence_ind>Y</licence_ind>
    <licence_date>10</licence_date>
    <addr_flat>3</addr_flat>
    <addr_floor>7</addr_floor>
    <addr_block>A</addr_block>
    <addr_bldg>YICK MAN BLDG</addr_bldg>
    <addr_st_no>36</addr_st_no>
    <addr_st_name>WESTLAND ROAD</addr_st_name>
    <addr_estate></addr_estate>
    <addr_district>QUARRY BAY</addr_district>
    <addr_area>KL</addr_area>
    <corr_addr_1></corr_addr_1>
    <corr_addr_2></corr_addr_2>
    <corr_addr_3></corr_addr_3>
    <corr_addr_4></corr_addr_4>
    <mobile_no>9123456</mobile_no>
    <tel_no></tel_no>
    <email_addr>LAISAI@YAHOO.COM</email_addr>
    <num_vehicles_with_zurich>0</num_vehicles_with_zurich>
  </proposer_info>  
  <named_driver>
    <repeat>
      <nm_drvr_seq>1</nm_drvr_seq>
      <nm_drvr_title>MR.</nm_drvr_title>
      <nm_drvr_lst_nm>SO</nm_drvr_lst_nm>
      <nm_drvr_fst_nm>LAI SAI</nm_drvr_fst_nm>
      <nm_drvr_sex>M</nm_drvr_sex>
      <nm_drvr_dob>01/01/1975</nm_drvr_dob>
      <nm_drvr_occupation>DIRECTOR</nm_drvr_occupation>
      <nm_drvr_occupation_class>N</nm_drvr_occupation_class>
      <nm_drvr_licence_date>10</nm_drvr_licence_date>
      <nm_drvr_rel>1</nm_drvr_rel>
    </repeat>
    <repeat>
      <nm_drvr_seq>2</nm_drvr_seq>
      <nm_drvr_title>MR.</nm_drvr_title>
      <nm_drvr_lst_nm>SO</nm_drvr_lst_nm>
      <nm_drvr_fst_nm>LAI LAI</nm_drvr_fst_nm>
      <nm_drvr_sex>M</nm_drvr_sex>
      <nm_drvr_dob>01/02/1979</nm_drvr_dob>
      <nm_drvr_occupation>CLERK</nm_drvr_occupation>
      <nm_drvr_occupation_class>N</nm_drvr_occupation_class>
      <nm_drvr_licence_date>6</nm_drvr_licence_date>
      <nm_drvr_rel>4</nm_drvr_rel>
    </repeat>  
    <repeat>
      <nm_drvr_seq>3</nm_drvr_seq>
      <nm_drvr_title>MRS.</nm_drvr_title>
      <nm_drvr_lst_nm>CHAN</nm_drvr_lst_nm>
      <nm_drvr_fst_nm>KA KA</nm_drvr_fst_nm>
      <nm_drvr_sex>M</nm_drvr_sex>
      <nm_drvr_dob>01/01/1978</nm_drvr_dob>
      <nm_drvr_occupation>HOUSE WIFE</nm_drvr_occupation>
      <nm_drvr_occupation_class>N</nm_drvr_occupation_class>
      <nm_drvr_licence_date>2</nm_drvr_licence_date>
      <nm_drvr_rel>2</nm_drvr_rel>
    </repeat>
  </named_driver>  
  <motor_info>
    <rgtn_no>HZ9888</rgtn_no>
    <rgtn_yr>1993</rgtn_yr>
    <cmpy_mk>TOYOTA</cmpy_mk>
    <mdl_of_car>MR II</mdl_of_car>
    <name_register>SO LAI SAI</name_register>
    <typ_of_bdy>SPORTS</typ_of_bdy>
    <no_of_seats>2</no_of_seats>
    <engn_cpcty>2000</engn_cpcty>
    <chasis_no>JT113SW2001234008</chasis_no>
    <engn_no>1S-9222704</engn_no>
    <trm_of_cvr>C</trm_of_cvr>
    <isrd_vl>120000</isrd_vl>
    <mtr_typ>P</mtr_typ>
    <hp_ind>N</hp_ind>
    <mortgagor></mortgagor>
    <hp_vl></hp_vl>
    <alarm_installed>Y</alarm_installed>
    <alarm_type>BUILT-IN</alarm_type>
    <alarm_name>FACTORY BUILT-IN</alarm_name>
    <car_modified>Y</car_modified>
  </motor_info>  
  <motor_usage>
    <usage_ind>P</usage_ind>
    <rent_ind>N</rent_ind>
    <rent_des></rent_des>
    <teaching_ind>N</teaching_ind>
    <teaching_des></teaching_des>
    <motortrade_ind>N</motortrade_ind>
    <motortrade_des></motortrade_des>
  </motor_usage>
  <previous_policy>
    <old_pcy_ind></old_pcy_ind>
    <old_ins_com></old_ins_com>
    <old_pcy_no></old_pcy_no>
    <old_rgtn_no></old_rgtn_no>
    <ncd_ind></ncd_ind>
    <ncd_prctg>20</ncd_prctg>
  </previous_policy>
  <driving_experience>
    <past_accident_ind>N</past_accident_ind>
    <past_claim_ind>N</past_claim_ind>
    <past_claim_des></past_claim_des>
    <marks_deduction_ind>N</marks_deduction_ind>
    <marks_deduction_des></marks_deduction_des>
    <illnesses_ind>N</illnesses_ind>
    <illnesses_des></illnesses_des>
    <reject_app_ind>N</reject_app_ind>
    <reject_app_des></reject_app_des>
  </driving_experience>
  <premium_excess>
    <loading_pct>20</loading_pct>
    <discount_pct>0</discount_pct>
    <basic_prem>5000</basic_prem>
    <mib_pct>3</mib_pct>
    <mib_vl>150</mib_vl>
    <gross_prem>5150</gross_prem>
    <net_prem>4850</net_prem>
    <admin_fee_prctg></admin_fee_prctg>
    <admin_fee_vl></admin_fee_vl>
    <general_ex></general_ex>
    <unnamed_driver_ex></unnamed_driver_ex>
    <young_driver_ex></young_driver_ex>
    <inexp_driver_ex></inexp_driver_ex>
    <parking_damage_ex></parking_damage_ex>
    <theft_loss_ex></theft_loss_ex>
    <tppd_ex></tppd_ex>
    <tppd_unnamed_driver></tppd_unnamed_driver>
    <tppd_young_driver></tppd_young_driver>
    <tppd_inexp_driver></tppd_inexp_driver>
  </premium_excess>  
  <others>
    <nm_drvr_cvr_ind>N</nm_drvr_cvr_ind>
    <isrd_on_mrkt_vl_ind>N</isrd_on_mrkt_vl_ind>
    <china_cvr_ind>N</china_cvr_ind>
    <pay_method>Q</pay_method>
    <pay_dt>15/04/2015</pay_dt>
    <rmrk></rmrk>
  </others>  
  <clause>
    <repeat>
      <code>ZPP33</code>
      <risk_no></risk_no>
      <hk_excess_amt></hk_excess_amt>
      <hk_excess_pct></hk_excess_pct>
    </repeat>
  </clause>
</policy>

加密后的文件

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1

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
=Wg4G
-----END PGP MESSAGE-----

文章分类 经验分享

发表评论