【问题标题】:Openssl decryption displays extra charactersOpenssl 解密显示多余字符
【发布时间】:2014-10-05 06:33:21
【问题描述】:

我想从 PHP 应用程序向 iOS 发送和接收加密数据,反之亦然。

在我解密从 iOS 应用程序接收到的字符串之前,一切都运行良好,它会在 PHP 中显示额外的字符,例如当字符串 (foo) 在 iOS 中加密时,这是我在 PHP 中得到的输出。

foo¤º   ¤º  äØKŒCarrier+†7†ÐHÀ€ôa$aLa°aTa(aX¿€<a@aèaaTwaØwaäwa0®50‡4€B4ÀB4°†4ð†4þ;Ð}2}20¸>@¸> ¸>LGa¿

解密后的字符串中存在foo字符,但有很多多余的字符。

我想知道这是 iOS 问题还是 PHP,如果是 IOS,可能是什么问题?是编码、填充还是其他?

P.S:iOS 应用程序正在使用 RSA_PKCS1_PADDING,当我将 RSA_NO_PADDING 与其他字符一起使用时,这是我得到的输出。

foodrrrrrrøžäØKŒJustify (Undo action name)äØKŒ!Raise Baseline (Undo action name)äØKŒClear Recent Searches?0xÔ\Õ8Ò|Ó`œšÕØf”œš€œšÔ

注意字符串 Justify (Undo action name) , Raise Baseline (Undo action name) 这里可能是什么问题?

更新:
这是我的 PHP 代码:

header('Content-Type: text/html; charset=utf-8');
$encrypt = Model_SSL::getInstance()->encrypt("PankeshRaj@iOS");
echo Model_SSL::getInstance()->decrypt("nhXQ7Yg1o5GzhXLe6x1LoKxK/Sg5qPDdA4SCtuH5LIp2klEPKQLAsOf+2ODg+A30k3EzyAjH+xKun9x4HPNIb67ETe4+84oMTPCk5TTuxOrSMNOjwm6L4mp01frOfT/OOcKvtCs+IuW3fWbbvbw/sgecDMG0IuuhsWvvL9FaOpLXkT8vGBOYh7pQH8Gkworf/dnonf/Rfk1vUYWkWlK7n/ycbl7uVVyIO+v3tcKfDdJuEvr4qOd5z3h323i7zvuHbt04WyPrV9Pjk0Zd9C2xte/K5bGHHTlRNZCEdLp5jhB9r7ljL4ToCpAiKSaBeG0HktXjDdW4+X1piPHox6e9Gw==");

这是我的 Model_SSL

<?php
class Model_SSL
{
    protected $publicKey;

    protected $privateKey;

    protected static $ssl;

    private function __construct()
    {
        $this->publicKey = file_get_contents(APPLICATION_PATH.'/../resources/ssl_keys/key.pub');
        $this->privateKey = file_get_contents(APPLICATION_PATH.'/../resources/ssl_keys/private.pem');
    }

    public static function getInstance()
    {
        if (!isset(self::$ssl)) {
            self::$ssl = new self;
        }
        return self::$ssl;
    }

    public function encrypt($string)
    {
        openssl_public_encrypt($string, $cryptedText, $this->publicKey);
        return base64_encode($cryptedText);
    }

    public function decrypt($string)
    {
        $string = base64_decode($string);
        openssl_private_decrypt($string, $decryptedText, $this->privateKey);
        return $decryptedText;
    }
}

对于 Objective-c,我正在尝试使用示例库,在这里发布的时间非常长,这是我正在使用的库的链接:https://github.com/jslim89/RSA-Example

【问题讨论】:

  • 您在 php 中使用了哪些标头?它应该设置为UTF-8
  • 我没有发送任何标题,让我尝试设置一下
  • @l'L'l 当我设置标题foodrrrrrr�����K�Justify (Undo action name)��K�!Raise Baseline (Undo action name)��K�Clear Recent Searches?0x�\�8�|�����f�������`时输出是这样的
  • 贴出你的代码,这样会更有帮助。
  • @l'L'l 已更新代码

标签: php objective-c encryption openssl


【解决方案1】:

解决方案是实现一个函数,通过在加密字符串中包含字符串长度来删除填充。

我这里已经解释过了OpenSSL encryption padding issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2022-11-25
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多