Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AES加密(AES/ECB/NOP)_Android_Ios_Encryption_Aes - Fatal编程技术网

Android AES加密(AES/ECB/NOP)

Android AES加密(AES/ECB/NOP),android,ios,encryption,aes,Android,Ios,Encryption,Aes,我想通过AES算法加密一些数据。 对于iOS,我使用的是AESCrypt库,而对于Android,我使用的是密码库,但结果不一样,尽管这和我们在这里讨论的算法是一样的。任何帮助都将不胜感激 iOS代码: NSString *encryptedData = [AESCrypt encrypt:message password:password]; Java代码 public static String encryptMethod(String seedBase64, byte[] key) {

我想通过AES算法加密一些数据。 对于iOS,我使用的是AESCrypt库,而对于Android,我使用的是密码库,但结果不一样,尽管这和我们在这里讨论的算法是一样的。任何帮助都将不胜感激

iOS代码:

NSString *encryptedData = [AESCrypt encrypt:message password:password];
Java代码

public static String encryptMethod(String seedBase64, byte[] key) {
    try {
        byte[] seed = Base64.decode(seedBase64, 0);
        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
        cipher.init(1, keySpec);
        return Base64.encodeToString(cipher.doFinal(seed), 0);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

有时,不同平台上的填充会出现问题,因此结果会有所不同,我建议使用一些像这样的跨平台库

有时不同平台上的填充会出现问题,因此结果会有所不同,我建议使用类似于此的跨平台库

cipher=cipher.getInstance(“AES/CBC/PKCS7Padding”);我非常确定java代码,因为它给了我我需要的结果,我的问题是iOS…你肯定应该使用填充,而不是不填充从不使用。它是确定性的,因此在语义上不安全。您至少应该使用随机模式,如或。最好是对密文进行身份验证,这样就不可能进行类似的攻击。这可以通过GCM或EAX等身份验证模式或scheme实现。CommonCrypto通过各种标志同时支持ECB和NOP。您不需要第三方库来实现这一点,但当然不应该使用这些代码。相反,你应该使用一个能为你做到这一点的库。请注意,好的库使用随机加密。因此,如果要检查兼容性,需要在一侧加密,在另一侧解密。cipher=cipher.getInstance(“AES/CBC/PKCS7Padding”);我非常确定java代码,因为它给了我我需要的结果,我的问题是iOS…你肯定应该使用填充,而不是不填充从不使用。它是确定性的,因此在语义上不安全。您至少应该使用随机模式,如或。最好是对密文进行身份验证,这样就不可能进行类似的攻击。这可以通过GCM或EAX等身份验证模式或scheme实现。CommonCrypto通过各种标志同时支持ECB和NOP。您不需要第三方库来实现这一点,但当然不应该使用这些代码。相反,你应该使用一个能为你做到这一点的库。请注意,好的库使用随机加密。所以,如果你想检查兼容性,你需要一边加密,另一边解密。我使用了这个库,甚至是RNEncryptor,结果仍然与我的android代码不同。这正常吗?您推荐的库支持多种语言/平台,但它缺少一件重要的事情:通过消息身份验证代码进行完整性检查。RNCryptor在这方面要好得多。我使用了这个库,甚至使用了RNEncryptor,结果仍然与我的android代码不同。这正常吗?您推荐的库支持多种语言/平台,但它缺少一件重要的事情:通过消息身份验证代码进行完整性检查。RNCryptor在这方面要好得多。