Android AES加密(AES/ECB/NOP)
我想通过AES算法加密一些数据。 对于iOS,我使用的是AESCrypt库,而对于Android,我使用的是密码库,但结果不一样,尽管这和我们在这里讨论的算法是一样的。任何帮助都将不胜感激 iOS代码: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) {
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在这方面要好得多。