iOS中的OpenSSL-AES-256-CBC加密

时间:2018-07-27 08:05:42

标签: encryption aes

我正在研究快速OpenSSl AES-256-CBC中的加密和解密。我已经检查了许多第三方库或Pod,例如CryptoSwift和许多其他库。但是我总是从php后端团队得到HMAc无效。 就像在android中一样,他们这样做:

以下是我的android方法:

public EncryptedData encrypt(Object data) throws Exception {
    String text;
    if (data instanceof String) {
        text = String.valueOf(data);
    } else {
        text = (new Gson()).toJson(data);
    }

    if (!this.doAction) {
        return new EncryptedData(text, "");
    } else {
        this.ivspec = new IvParameterSpec(this.getIV1().getBytes());
        this.keyspec = new SecretKeySpec(this.getKey1().getBytes(), "AES");
        if (text != null && text.length() != 0) {
            byte[] encrypted;
            try {
                this.cipher.init(Cipher.ENCRYPT_MODE, this.keyspec, this.ivspec);
                encrypted = this.cipher.doFinal(this.padString(text).getBytes());
            } catch (Exception var5) {
                throw new Exception("[encrypt] " + var5.getMessage());
            }
            String encryptedData = new String(Base64.encode(encrypted, Base64.DEFAULT))
                    .replace("\n", "");

            SecretKeySpec macKey = new SecretKeySpec(getKey1().getBytes(), "HmacSHA256");
            Mac hmacSha256 = Mac.getInstance("HmacSHA256");
            hmacSha256.init(macKey);
            hmacSha256.update((Base64.encodeToString(getIV1().getBytes(), Base64.DEFAULT).trim() + encryptedData.trim()).getBytes());
            byte[] calcMac = hmacSha256.doFinal();

            return new EncryptedData(encryptedData, bytesToHex(calcMac));
        } else {
            throw new Exception("Empty string");
        }
    }
}

任何人都知道这在iOS中将如何工作。 任何帮助将不胜感激。 谢谢

0 个答案:

没有答案
相关问题