跨语言可逆加密(PHP,Python)

时间:2013-08-19 15:17:13

标签: php python passwords password-encryption

我有一个PHP驱动的Web表单,我希望能够输入密码,加密密码并将其加载到数据库中。然后,使用Python,查询该密码,对其进行解密,然后使用它对使用SMTPLIB的Microsoft Exchange电子邮件服务器进行身份验证。其余的身份验证信息将以纯文本格式存储。我的主要目标是不以纯文本格式存储密码。

我尝试使用这两种语言的唯一原因是我的程序的其余“工作”是用Python完成的。我只使用PHP作为简单的界面。这只是为了保持一致性。

是否有一个易于使用的跨语言可逆加密库可用于此目的?

在PHP中制作我的电子邮件脚本会更好吗?如果是这种情况,建议将哪个库用于此任务?

2 个答案:

答案 0 :(得分:0)

AES对称加密:

答案 1 :(得分:0)

如果需要重新读取密码,请在数据库层而不是应用层执行加密 - 只需确保您在本地或通过SSL连接数据库。

要存储密码,步骤如下:

  • 计算机>>
  • HTTPS>>
  • Web服务器(PHP表单)>>
  • (如果在不同的服务器上使用HTTPS>>)
  • 数据库(AES加密)

根据您使用的数据库,语法可能会发生变化,但使用MySQL,您可以执行以下操作:

INSERT INTO `table` (`password`) 
VALUES (AES_ENCRYPT('{$sPassword}', '{$sEncryptionKey}'))

由于PHP正在将其写入数据库,您可以使用PDO预处理语句来获取数据......

要使用Python脚本检索密码,您只需要在SQL服务器上运行SELECT语句(假设数据在AES加密的BLOB中):

SELECT CONVERT(AES_DECRYPT(`table`.`password`, '{$sEncryptionKey}') USING 'utf8')
AS `password`

这样,PHP和Python之间所需的唯一公共数据就是加密密钥(它只是一个字符串)。只要您在通过Internet传递此数据时保持SSL连接,就应该没问题。