![](/img/trans.png)
[英]Encrypting in PHP (mcrypt), Decrypting in Ruby (OpenSSL::Cipher)
[英]PHP: mcrypt vs. asymmetrical openssl for encrypting messages between two parties
我正在开发一个基本的安全消息系统。 我希望默认情况下使用用户的哈希密码(加上盐和胡椒)作为密钥来加密存储在MySQL数据库中的消息。 运行此系统的站点仅通过SSL访问。
我一直在使用以下过程在PHP的mcrypt
扩展下开发它:
user1向user2发送$message
$message
使用user1的密钥存储在user1的聊天记录中,也存储在“传输”表中,使用全局密钥(存储在数据库外部)进行加密,只要表空为空,就会重新生成
$message
,用user2的密钥加密user2的聊天记录的消息(因此,每个消息之间发送的消息)两个用户实际存储两次;一次使用每个用户自己的密钥)并从传输表中删除该消息 我意识到这不是完美的(传输表是明显的弱点),但在咨询各种讨论和文章之后,这是我能想到的最好的。
然后我突然意识到,使用OpenSSL
扩展来进行非对称加密可能会更好。 但是,在我与mcrypt
几天之前:
这是正确的想法吗?
OpenSSL
是为此设计的和/或能够实现的吗?
OpenSSL
慢了OpenSSL
数量级。 加密更强大还是仅仅是非对称加密的本质? 我会回答每个项目:
是的,使用非对称加密通常用于传输消息。 请参阅例如CMS和PGP容器格式。 当然还有更多。 特别是使用某种PKI建立信任。
绝对。 它包含用于创建和读取PKCS#7容器格式的方法,这些格式等同于加密消息语法(CMS)和用于处理保存非对称公钥(需要信任)的X509证书的库。 您当然也可以创建自己的格式。 目前还包括GCM加密,这对聊天应用程序非常有用。 最后,您可能最终会使用混合加密 - 部分不对称,部分对称。
这是非对称加密的本质。 对于相同大小的密钥,通常对称加密更强。 攻击可能是完全不同的,所以你不能创建一个直接比较,或说一个是另一个的两倍强。 您可以比较http://www.keylength.com/等网站上的关键优势。
如果您想要更快的加密,那么您可以使用Elliptic Curve加密。 另一种常见方法是建立对称会话密钥并将其用于加密(消息机密性)以及可能的消息认证和完整性。
执行邮件加密时要小心填充oracle攻击和中间人攻击! 让东西上班相对容易。 确保安全不是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.