こんにちは、ECB モードで AES256 を使用して IOS 環境で暗号化された文字列を復号化する際に問題が発生しました。この暗号化された文字列を Java で復号化する必要があります。
Javaで復号化するためのコードを共有させてください
public static String decrypt(String strToDecrypt) throws UnsupportedEncodingException
{
byte[] key = "12345678911234567891123456789112".getBytes("UTF-8");
try
{ Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
final SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
final String decryptedString = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt.getBytes("UTF-8"))));
return decryptedString;
}
catch (Exception e)
{
System.out.println("Error while decrypting"+ e);
}
return null;
}
IOS プラットフォームでの暗号化コード
- (NSData *)AES256EncryptWithKey:(NSString *)key:(NSString *)plaintext {
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSLog(@" key ptr string %s",keyPtr);
NSData *dTextIn=[plaintext dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [dTextIn length];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//That's why we need to add the size of one block here
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[dTextIn bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
//the returned NSData takes ownership of the buffer and will free it on deallocation
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer); //free the buffer;
return nil;
}
original string is "my name is nitish" // which is encoded in IOS Platform, padding PKCS7Padding and ECB Mode
Encrypted String1 in IOS platform is "p1sBWnbfE/5g3RdT7PHBFy6idtGJlpLBq5IqKV4wXKQ="
Encrypted string in java platform is "p1sBWnbfE/5g3RdT7PHBF8z1aSePf1f9hn6Z33GdrRI="
エラーの内容と、Java プラットフォームで ios 文字列を復号化できない理由はわかりませんが、Java プラットフォームで暗号化された文字列を復号化できます。解決策を教えてください。
エラーが復号化されていますjavax.crypto.BadPaddingException: パッド ブロックが壊れています
前もって感謝します