1
wzxjohn 2014-10-22 20:07:19 +08:00 1
不是非常了解PHP的函数,不知道有没有简单的方法,但是如果你手动把明文base64一下,然后切断,分段不足117的补不存在base64中的字符,然后再加密,这样就可以了嘛。。。
|
2
me2you OP @wzxjohn 谢谢,你说的是把明文分段加密是吧?我还在网上看到一个说可以用RSA的DES加密算法进行加密,据说DES不限定明文长度,但是就是不晓得openssl库中有没有DES的函数,明天去找找看
|
3
semicircle21 2014-10-23 10:56:07 +08:00
如果整套加密方案都是你自己定, 那你要学习不少东西了.. 我不久前用到这些, 研究了一阵:
这种非对称加密/解密(RSA)消耗的资源是比较大的, 一般都是在传输过程中, 是用来交换对称加密(AES/DES/RC4)秘钥的, 所以很少有用 RSA 加密任意长度数据的场景, 所以你大概很难搜到相关资料. 用 AES 等对称加密的时候, 你也会遇到长度问题: AES 是分"块"来加密的, 块与块之间还有上下文, 前一块的状态如何传给下一块, 大概有一些 CBC 之类的方法; 然后还有补 Pad 的问题: 内容不足一个块怎么办, 也有一些现成的方案: PKCS7 等; 然后是混淆问题: 如果每次传输的明文都是相同内容, 密文也相同, 那么某种意义上, 也就等于泄露了信息, 所以要在传输的最开始加入一块随机生成的内容, 也就是 initial vector. |
4
me2you OP @semicircle21 我现在的做法是,将数组的每一个元素采用上面的加密方法加密,然后bese64编码,再连上一个特殊的字符串进行分段标记,接收端在收到密文后先按照事先约定的分段标记进行切割成数组,再循环数组逐一解密,用的是4096的RSA加密,RSA算法复杂 资源开销是比较大
|
5
semicircle21 2014-10-23 16:07:03 +08:00 1
@me2you 为什么要做 base64 呢? base64没有提升安全性,却使明文更长了. 如果你要加密的长度不太长, 也许 缩在一个4096里就 ok 了.
我不太了解 PHP 的函数. |
6
me2you OP @semicircle21 因为rsa加密之后的密文会在浏览器上显示出乱码和空格,怕在传输的过程中出现什么问题,所以传输前先base64下,收到经过base64编码之后的密文再去base64_decode,可以还原空格和乱码。比较倾向于这种传输可读字符的做法
|
7
me2you OP @semicircle21 按现有的数据,4096不够用,4096只是当天数据的1/4大概,不过rsa传小数据量的数据还是真心不错
|
8
semicircle21 2014-10-23 18:43:14 +08:00
|
9
me2you OP @semicircle21 私钥存在另一台服务器上的,php引入使用,用rsa是来互相交换2台服务器中当天新增客户的联系信息
|
10
semicircle21 2014-10-24 21:26:37 +08:00
嗯. 如果两台服务器都由你们控制的话, 感觉让系统管理员弄个 VPN 或者用 ssh 隧道连接应该更省事一点.
|