加密128位字符串的过程

时间:2014-08-18 18:03:02

标签: ios objective-c encryption cryptography

确定。我完全陷入加密困境。有人可以引导我完成如何使用AES 128bit密钥,CBC,PKCS7Padding,base64格式加密字符串的过程吗?我是加密的新手,所以请耐心等待。我过去发布的问题与之前的第三方图书馆有关,但没有一个对我有用。如果有人可以提供示例代码并简要说明非常感谢的过程。谢谢。

1 个答案:

答案 0 :(得分:2)

对于发现错误和/或省略的人,请添加一个commwent,我将直接修改或编辑此帖子。

AES 128位密钥,CBC,PKCS7Padding,base64

  • AES:是一种加密方法(高级加密标准)
  • 128位:密钥长度(16字节)。
  • CBC:加密模式(密码块链接)
  • PKCS7Padding:向要加密的数据添加字节,使数据成为块大小的正好倍数
  • Base64:将8位数据编码为可打印字符。与加密无关,但多次与加密一起使用
  • 阻止:AES一次加密数据块(16字节)
  • iv:某些加密模式的种子值,包括CBC(初始化向量)

需要“AES,128位密钥,CBC,PKCS7Padding”

加密:

  • 数据:8位字节(任意数字)
  • key:16个8位字节(完全)
  • iv:16个8位字节(完全)

加密使用这些输入来创建8位字节的加密输出,其长度比输入长,因为填充可以创建块大小的精确倍数。这将使输出数据至少比输入长1个字节。

输出是原始字节,不是ASCII或unicode编码。在许多情况下,结果必须是可打印的字符,并且是Base64编码来实现的。 Base64编码使数据更长。

解密:
如果数据采用Base64格式,则将其解码为原始字节

  • 数据:8位字节
  • key:16个8位字节(完全)
  • iv:16个8位字节(完全)

输出将是原始的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