美文网首页
Java AES与iOS

Java AES与iOS

作者: SMFly | 来源:发表于2020-05-19 22:12 被阅读0次

    Java代码

    加密 CBC(key + iv)
    public static String encryptAES(String content, String key) 
                throws InvalidKeyException, NoSuchAlgorithmException, 
                NoSuchPaddingException, UnsupportedEncodingException, 
                InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
    
        byte[] byteContent = content.getBytes("UTF-8");
    
        // 注意,为了能与 iOS 统一
        // 这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成
        byte[] enCodeFormat = key.getBytes();
        SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
            
        byte[] initParam = IV_STRING.getBytes();
        IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);
            
        // 指定加密的算法、工作模式和填充方式
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        
        byte[] encryptedBytes = cipher.doFinal(byteContent);
        
        // 同样对加密后数据进行 base64 编码
        Encoder encoder = Base64.getEncoder();
        return encoder.encodeToString(encryptedBytes);
    }
    

    iOS

    考虑使用CryptoSwift
    
    

    关于AES-128、AES-192、AES-256

    CryptoSwift 会根据密钥的长度自动选择对应的加密算法(AES128, AES192, AES256)
    AES-128 = 16 bytes
    AES-192 = 24 bytes
    AES-256 = 32 bytes
    
    eg:
    let aes = AES(key: key.bytes, blockMode: CBC(iv: iv.bytes))
    key字符串的位数为16、24、32时,自动对应AES-128、AES-192、AES-256
    

    相关文章

      网友评论

          本文标题:Java AES与iOS

          本文链接:https://www.haomeiwen.com/subject/nmoiohtx.html