AES暗号を初めて使用しています。 パスワードを暗号化するために次のJavaコードを使用していますが、正常に動作します。IVを目的のCでAES暗号化から取得するにはどうすればよいですか?
private void startEncryption() throws UnsupportedEncodingException {
String text = "15";
String key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String ivString = "LXUJOLKDEJKGTMAV";
byte[] valueBytes = text.getBytes();
byte[] keyBytes = keyString.getBytes("UTF-8");
byte[] ivBytes = ivString.getBytes();
byte[] ivFinalBytes = new byte[16];
for(int i=0; i<16; i++){
ivFinalBytes[i] = ivBytes[i];
}
encrypt(valueBytes, keyBytes, ivFinalBytes);
}
private void encrypt(byte[] valueBytes, byte[] keyBytes, byte[] ivBytes) {
try {
SecretKeySpec ks = new SecretKeySpec(keyBytes, "AES");
Cipher c = Cipher.getInstance("AES/CBC/PKCS7Padding");
IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
c.init(Cipher.ENCRYPT_MODE, ks, ivParameterSpec);
byte[] clearText = c.doFinal(valueBytes);
String ivPass = Base64.encodeToString(c.getIV(), Base64.DEFAULT);
String pass = Base64.encodeToString(clearText, Base64.DEFAULT);
encryptedPassword = ivPass+pass;
encryptedPassword = encryptedPassword.replace("\n", "").replace("\r", "");
} catch (Exception e) {
System.out.println("exception: "+e);
}
}
出力は次のようになります。
azhTMrwGqTN21O4oRenR6Q==VE5LTU9GT1BCWldRSEREQQ==
を今、私は客観Cで同じことをやろうとしています私が今使っているコードを以下に示します。
-(NSString*)testActuallyEncrypting:(NSString *)data
{
NSString *key = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
NSString *iv = @"LXUJOLKDEJKGTMAV";
NSData *dataIn = [data dataUsingEncoding:NSUTF8StringEncoding];
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
CCCryptorStatus ccStatus = kCCSuccess;
size_t cryptBytes = 0;
NSMutableData *dataOut = [NSMutableData dataWithLength:dataIn.length + kCCBlockSizeAES128];
ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyData.bytes, kCCKeySizeAES256,
ivData.bytes,
dataIn.bytes, dataIn.length,
dataOut.mutableBytes, dataOut.length,
&cryptBytes);
if (ccStatus != kCCSuccess) {
NSLog(@"CCCrypt status: %d", ccStatus);
}
dataOut.length = cryptBytes;
NSString *objcEncrypted = [dataOut base64EncodedStringWithOptions:0];
NSLog(@"objcEncrypted: %@", objcEncrypted);
return objcEncrypted;
}
らしいです私は正しい暗号化されたパスワードを取得しているようです。 VE5LTU9GT1BCWldRSEREQQ ==
どうすればIVを得ることができますか?azhTMrwGqTN21O4oRenR6Q ==のようになりますか?
をencryptedString返します! –
ありがとうございます。私はアプリを作るだけです。暗号化はクライアントが望むものです。 – Piscean
それはいいアイデアだったのですか? –