1

iPhoneが暗号化されたテキストをAndroidに送信したり、その逆を行ったりできるようにする暗号化クラスを作成しようとしています。これはAndroidでは非常に簡単ですが(次のコード)

    private static final String CIPHER_ALGORITHM = "AES";
private static final String RANDOM_GENERATOR_ALGORITHM = "SHA1PRNG";
private static final int RANDOM_KEY_SIZE = 128;

// Encrypts string and encode in Base64
public static String encrypt( String password, String data ) throws Exception 
{
    byte[] secretKey = generateKey( password.getBytes() );
    byte[] clear = data.getBytes();

    SecretKeySpec secretKeySpec = new SecretKeySpec( secretKey, CIPHER_ALGORITHM );
    Cipher cipher = Cipher.getInstance( CIPHER_ALGORITHM );
    cipher.init( Cipher.ENCRYPT_MODE, secretKeySpec );

    byte[] encrypted = cipher.doFinal( clear );
    String encryptedString = Base64.encodeToString( encrypted, Base64.DEFAULT );

    return encryptedString;
}

// Decrypts string encoded in Base64
public static String decrypt( String password, String encryptedData ) throws Exception 
{
    byte[] secretKey = generateKey( password.getBytes() );

    SecretKeySpec secretKeySpec = new SecretKeySpec( secretKey, CIPHER_ALGORITHM );
    Cipher cipher = Cipher.getInstance( CIPHER_ALGORITHM );
    cipher.init( Cipher.DECRYPT_MODE, secretKeySpec );

    byte[] encrypted = Base64.decode( encryptedData, Base64.DEFAULT );
    byte[] decrypted = cipher.doFinal( encrypted );

    return new String( decrypted );
}

public static byte[] generateKey( byte[] seed ) throws Exception
{
    KeyGenerator keyGenerator = KeyGenerator.getInstance( CIPHER_ALGORITHM );
    SecureRandom secureRandom = SecureRandom.getInstance( RANDOM_GENERATOR_ALGORITHM );
    secureRandom.setSeed( seed );
    keyGenerator.init( RANDOM_KEY_SIZE, secureRandom );
    SecretKey secretKey = keyGenerator.generateKey();
    return secretKey.getEncoded();
}
}

私は同様のトピックについて何十もの答えを見てきましたが、同じ結果をもたらすiOS用の実際に機能するコードを取得できませんでした。ほとんどのコードは正しくコンパイルされません。誰かがそのための実際に機能するコードを持っていますか?

4

1 に答える 1

2

iOS のRNCryptorと Java のJNCryptorを参照してください。それらは同じファイル形式を実装しています。ランダムな IV を使用して AES-CBC-256 を正しく処理し、ランダムなソルトを使用して PBKDF2 で生成されたパスワードを処理し、データ認証と整合性のために検証済みの HMAC を処理します。

于 2013-02-02T21:37:38.797 に答える