-1

AES256暗号化方式を使用してBlackBerryでデータを暗号化したい。要件は、パディングなしで暗号化することです。「AES/ECB/NoPadding」。16バイトの配列を渡していますが、返される暗号化されたデータは長さ32の16進値です。次のことを試しましたが、正しい結果が得られません。戻り値は、予想される暗号化された値とは異なります。Androidでテスト済み。AndroidとBlackBerryの間の結果は集計されません。私は次の方法を使用しました:

public static String EncryptData(byte[] keyData, byte[] data) throws Exception {      
          String encryptedData = "";        
          AESKey key = new AESKey(keyData);
          NoCopyByteArrayOutputStream out = new NoCopyByteArrayOutputStream();
          AESEncryptorEngine engine = new AESEncryptorEngine(key);
          BlockEncryptor encryptor = new BlockEncryptor(engine, out);
          encryptor.write(data, 0, data.length);
          int finalLength = out.size();
          byte[] cbytes = new byte[finalLength];
          System.arraycopy(out.getByteArray(), 0, cbytes, 0, finalLength);
          encryptedData = getHexString(cbytes);
          return encryptedData;
      }

誰か案内してもらえますか?

編集:以下は同等のAndroidコードです:

Dim Kg As KeyGenerator
    Dim c As Cipher
    c.Initialize("AES/ECB/NoPadding") ' just "DES" actually performs "DES/ECB/PKCS5Padding". 
    Kg.Initialize("DESede")
    Kg.KeyFromBytes(key)
    bytes = Kg.KeyToBytes
    msg_data = c.Encrypt(msg_data, Kg.key, False)
    Return Bconv.HexFromBytes(msg_data)
4

1 に答える 1

0

Basic4Android コードに誤りがあります。AES で暗号を初期化します。

c.Initialize("AES/ECB/NoPadding")

ただし、キー ジェネレーターを TripleDES で初期化します。

Kg.Initialize("DESede")

このドキュメントによると、「DESede」を「AES」に変更するだけです。

Kg.Initialize("AES")

また、ECB とパディングなしで AES を使用することはお勧めしません。特に、CBC や CTR モードを使用するのと同じくらい簡単な場合は、安全ではありません。実際にどれほど安全でないかの例については、このウィキペディアの記事を参照してください。

于 2013-01-08T07:50:14.007 に答える