前言
由于某些项目需求,我们需要对敏感资料进行加密处理。
PGP 指的是啥?它是个软件,Symantec旗下的商业产品。
PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件。可以用它对邮件保密以防止非授权者阅读,它还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。它可以提供一种安全的通讯方式,而事先并不需要任何保密的渠道用来传递密匙。它采用了一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。它的功能强大,有很快的速度。而且它的源代码是免费的。
OpenPGP 是一个加/解密标准
由于加/解密的需求太多了,所以也有一个开源的实现了PGP相同功能的项目叫 GPG(GnuPG),他们都完整实现了 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-----
发表评论
要发表评论,您必须先登录。