我使用PHP向服务器发送openssl加密字符串到iOS,反之亦然,在使用PHP的服务器中我需要加密/解密字符串,与iOS相同,一切正常,除了从iOS接收的字符串包含额外的字符,之后很少有搜索我明白RSA加密默认使用PKCS1填充,例如,它会将额外的字符附加到加密字符串。
加密后的字符串foo在解密后获得此输出。
foo¤º ¤º äØKŒCarrier+†7†ÐHÀ€ôa$aLa°aTa(aX¿€<a@aèaaTwaØwaäwa0®50‡4€B4ÀB4°†4ð†4þ;Ð}2}20¸>@¸> ¸>LGa¿
我原本希望PHP能够从字符串中删除那些不需要的填充,但不幸的是它并没有,我能想到的唯一解决方法是沿着字符串发送长度并删除那些不需要的字符,例如,在添加长度后,解密的字符串将如下所示。
3_foo¤º ¤º äØKŒCarrier+†7†ÐHÀ€ôa$aLa°aTa(aX¿€<a@aèaaTwaØwaäwa0®50‡4€B4ÀB4°†4ð†4þ;Ð}2}20¸>@¸> ¸>LGa¿
我可以得到字符串长度的初始3_
,然后删除其余部分。
我想告诉你,如果可以接近或者是否有任何其他选择,或者PHP应该自动为我做这件事。
如果你想查看我正在使用的代码,请点击另一篇文章:Openssl decryption displays extra characters
感谢您的回复。
答案 0 :(得分:0)
对于那些在删除填充方面遇到问题的人,我就是为解决方案所做的。
我在每个字符串的开头添加了字符串长度,我的字符串看起来像:
9_foostring¤º¤ºäØKŒCarrier+†7†Ðaa $ aL°aTa(aX¿€¸&gt;
在这种情况下从字符串的开头获取长度前缀9_
拆分没有长度前缀的字符串,现在我的字符串看起来像:
foostring¤º¤ºäØKŒCarrier+†7†Ðaa $ aL°aTa(aX¿€¸&gt;
获取字符串的前9个字符并删除其余字符。
这解决了我的问题,希望这对有类似问题的人也有帮助。