繁体   English   中英

如何在Java中加密并在Android和iOS中解密

[英]How to encrypt in Java and decrypt in Android and iOS

我有一台运行Java-jar文件的Linux服务器,可以加密多个文件。

Android和iPhone App下载该文件并将其解密。 我必须使用什么算法?

我认识到我在Java中使用的算法在Android中不起作用。 我在Java中所做的是:

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(clear);
    return encrypted;
}

什么在上面的代码中不起作用? 任何替代品?

iOS版:

我使用NSString + AESCrypt( https://github.com/Gurpartap/AESCrypt-ObjC

样品:

NSString* encrypted = [plainText AES256EncryptWithKey:@"MyEncryptionKey"];
NSString* decrypted = [encrypted AES256DecryptWithKey:@"MyEncryptionKey"];

Android(AES256Cipher - https://gist.github.com/dealforest/1949873 ):

加密:

String base64Text="";
try {
    String key = "MyEncryptionKey";
    byte[] keyBytes = key.getBytes("UTF-8");
    byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
    byte[] cipherData;

    //############## Request(crypt) ##############
    cipherData = AES256Cipher.encrypt(ivBytes, keyBytes, passval1.getBytes("UTF-8"));
    base64Text = Base64.encodeToString(cipherData, Base64.DEFAULT);
}
catch ( Exception e ) {
    e.printStackTrace();
}        

解密:

String base64Text="";
String plainText="";
try {
    String key = "MyEncryptionKey";
    byte[] keyBytes = key.getBytes("UTF-8");
    byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
    byte[] cipherData;

    //############## Response(decrypt) ##############
base64Text = User.__currentUser.getPasscode();
    cipherData = AES256Cipher.decrypt(ivBytes, keyBytes, Base64.decode(base64Text.getBytes("UTF-8"), Base64.DEFAULT));
    plainText = new String(cipherData, "UTF-8");            
}
catch ( Exception e )
{
    e.printStackTrace();
}

下面的链接提供了使用对称密钥加密的加密和解密的一个很好的示例。

使用的对称密钥是自定义纯文本。 如果我们需要使用IOS设备进行解密,这会有所帮助。 该示例使用AES 128位加密。 请注意,它使用IV参数。 由于加密是128位,密钥的长度应为16。

在Android端,可以使用相同的方法实现,因为该语言是Java。 在IOS中, CommonCryptor.h可用于加密解密。

http://www.java-redefined.com/2015/06/symmetric-key-encryption-ios-java.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM