确定。我完全陷入加密困境。有人可以引导我完成如何使用AES 128bit密钥,CBC,PKCS7Padding,base64格式加密字符串的过程吗?我是加密的新手,所以请耐心等待。我过去发布的问题与之前的第三方图书馆有关,但没有一个对我有用。如果有人可以提供示例代码并简要说明非常感谢的过程。谢谢。
答案 0 :(得分:2)
对于发现错误和/或省略的人,请添加一个commwent,我将直接修改或编辑此帖子。
AES 128位密钥,CBC,PKCS7Padding,base64
需要“AES,128位密钥,CBC,PKCS7Padding”
加密:
加密使用这些输入来创建8位字节的加密输出,其长度比输入长,因为填充可以创建块大小的精确倍数。这将使输出数据至少比输入长1个字节。
输出是原始字节,不是ASCII或unicode编码。在许多情况下,结果必须是可打印的字符,并且是Base64编码来实现的。 Base64编码使数据更长。
解密:
如果数据采用Base64格式,则将其解码为原始字节
输出将是原始的8位数据字节,与加密完全相同。如果加密输入数据是ASCII或unicode编码,则输出也将是。
这就是它的全部。困难在于使三个项目(数据,密钥和iv)完全相同。
许多加密软件包会接受密钥和iv,这些软件要短(或在iv情况下丢失)并将它们填充到必要的长度以某种方式。这是非标准的并且会引起问题。解决这个问题的简单方法是提供正确长度的值。这些是数据,即8位字节,而不是字符串,如果您将字符串转换为数据。比较数据时,key和iv仅使用十六进制转储。如果您这样做,则加密/解密将正常工作。
还有其他一些问题:
密钥和iv必须为双方所知(加密和解密)。密钥通常由一方通过单独的通信提供给另一方,甚至可能是蜗牛邮件。 iv也是共享的,不需要保密,实际上它可以与加密数据一起发送。
关键需要良好且长度正确。如果是密码,则使用函数以不可逆的方式使其更长。它应该不真的很快。当前的最佳实践是使用具有迭代计数的PBKDF2(基于密码的密钥派生函数)函数。较旧的代码倾向于使用简单的哈希(MD5或SHA- *),但不再需要在新工作中使用。
Apple在Common Crypto中为加密和密钥派生以及NSData for Base64编码提供了所有这些API。
免费提供PDF版本Handbook of Applied Cryptography
的PDF