1

"yIH7EYW0e4HuxkHApkG7xQ=="PHP サーバー側で暗号化された文字列 ( ) を復号​​化しようとして、長い時間を費やしましたが、成功しませんでした。文字列は iOS プラットフォームで暗号化され、base64 形式を使用してテキストにエンコードされました。

とにかく、誰かが私の PHP 側の間違いを訂正してくれませんか (私はこの側が少し苦手です)。この方法はそのままではあまり安全ではないことは承知しています。openssl でより良い方法を研究できるようになるまで、一時的な解決策が必要です。


PHP:

$str_encrypted = "yIH7EYW0e4HuxkHApkG7xQ=="; // base64encoded
$mykey = "my password";
$decrypted = decrypt_data($str_encrypted =, $mykey);

function decrypt_data($str_encrypted =, $mykey)
{
  $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
  $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  $decrypted_text = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $encryptionkey, $text, MCRYPT_MODE_ECB, $iv);
  return $decrypted_text;
}

IO:

- (NSString *)AES128EncryptWithKey:(NSString *)key
{

    NSData *plainData = [self dataUsingEncoding:NSUTF8StringEncoding];
    NSData *encryptedData = [plainData AES128EncryptWithKey:key];

    NSString *encryptedString = [encryptedData base64Encoding];

    return encryptedString;

}

IO:

- (NSString *)base64Encoding
{
   const unsigned char *bytes = [self bytes];
   NSMutableString *result = [NSMutableString stringWithCapacity:self.length];
   unsigned long ixtext = 0;
   unsigned long lentext = self.length;
   long ctremaining = 0;
   unsigned char inbuf[3], outbuf[4];
   unsigned short i = 0;
   unsigned short charsonline = 0, ctcopy = 0;
   unsigned long ix = 0;

   while( YES )
   {
      ctremaining = lentext - ixtext;
      if( ctremaining <= 0 ) break;

      for( i = 0; i < 3; i++ )
      {
         ix = ixtext + i;
         if( ix < lentext ) inbuf[i] = bytes[ix];
         else inbuf [i] = 0;
      }

      outbuf [0] = (inbuf [0] & 0xFC) >> 2;
      outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4);
      outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6);
      outbuf [3] = inbuf [2] & 0x3F;
      ctcopy = 4;

      switch( ctremaining )
      {
         case 1:
            ctcopy = 2;
            break;
         case 2:
            ctcopy = 3;
            break;
      }

      for( i = 0; i < ctcopy; i++ )
         [result appendFormat:@"%c", encodingTable[outbuf[i]]];

      for( i = ctcopy; i < 4; i++ )
         [result appendString:@"="];

      ixtext += 3;
      charsonline += 4;

   }

   return [NSString stringWithString:result];
}
4

0 に答える 0