iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现

这篇具有很好参考价值的文章主要介绍了iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近和服务器同学对接口进行数据加解密时用到了AES加密。原本以为AES就一种加密形式,对接过程中才学习到AES不同模式、不同填充方式下,结果都不相同。因此去学习了一下AES加密的基本概念、实现原理,以及各种模式下的区别与实现。

一、概念

AES加密是对称加密的一种,全称是Advanced Encryption Standard(高级加密标准)。常用于网络传输中的数据加解密。

iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现

这是一个AES在线加密工具。通过网站上的内容可以可以看出,加解密除了需要秘钥(Key)之外,AES还有多种模式,不同的模式加密的方式和结果都不相同。同时还有秘钥长度、初始向量、填充方式等参数,结果也是不尽相同。下面简单介绍一下AES加密的一些概念和参数:

  • 分组(或者叫块) :AES是一种分组加密技术,即把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128 bits,也就是每个分组为16个bytes(16bytes = 128bits / 8)。
  • 密钥长度:AES支持的密钥长度可以是128 bits、192 bits或256 bits。密钥的长度不同,推荐加密轮数也不同,如下表:
iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现
  • 加密模式:因为分组加密只能加密固定长度的分组,而实际需要加密的明文可能超过分组长度,此时就要对分组密码算法进行迭代,以完成整个明文加密,迭代的方法就是加密模式。它有很多种,常见的工作模式如下图:
iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现
  • 初始向量(IV,Initialization Vector) :目的是防止同样的明文块,始终加密成同样的密文块,以CBC模式为例:
iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现

在每一个明文块加密前,会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或,从而保证加密出的密文块都不同。文章来源地址https://www.toymoban.com/news/detail-432684.html

  • 填充方式(Padding) :由于密钥只能对确定长度的数据块进行处理,而数据的长度通常是可变的,因此需要对最后一块做额外处理,在加密前进行数据填充。常用的模式有PKCS5, PKCS7等。
填充方式 说明 示例(假定块长度为8,数据长度为9)
None 不填充
PKCS7 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。 填充用八位字节数,等于7:数据: FF FF FF FF FF FF FF FF FFPKCS7 填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
PKCS5 通常与PKCS7通用。区别在于PKCS5明确定义Block的大小是8位,而PKCS7不确定
ANSIX923 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零 数据: FF FF FF FF FF FF FF FF FFX923

到了这里,关于iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java实现数据加密:掌握DES CBC和ECB两种模式

    DES算法是一种对称加密算法,它使用相同的密钥进行加密和解密。DES算法是一种分组密码,即将明文分成固定长度的块,并对每个块进行加密。DES算法将每个64位的明文块分成两个32位的半块,然后进行一系列的加密和解密操作,最终得到一个64位的密文块。 CBC(Cipher Block C

    2023年04月19日
    浏览(38)
  • iOS MT19937随机数生成,结合AES-CBC加密算法实现。

    按处理顺序说明: 1. 生成随机数序列字符串函数 生成方法MT19937,初始种子seed,利用C++库方法,生成: 2. 对第一部中的随机数序列字符串进行sha256加密,得到64字节的一个数据流函数。  3. AES-CBC加密解密方法 /*     CCCrypt方法提供了CBC 和 ECB 两种AES加密模式,     如果不传

    2024年04月09日
    浏览(50)
  • 前端CryptoJS-AES加解密 对应php的AES-128-CBC加解密踩坑(java也相同加解密)

     前端部分注意看填充是pkcs7 有个前提,要看前端有没有转成hex格式,如果没转,php那边就不需要调用特定函数转hex格式的 后端php代码

    2024年02月15日
    浏览(52)
  • C++使用openssl对AES-256-ECB PKCS7 加解密

    2024年02月03日
    浏览(34)
  • 小程序AES加密ECB模式

    2024年02月09日
    浏览(270)
  • Python使用CBC加密模式进行AES加密

    在这个示例中,我们使用了 cryptography 库的 Cipher、algorithms、modes、backend 和 padding 模块。 encrypt 函数接受明文字符串、密钥和初始向量(IV)作为参数。 我们首先使用 Cipher 类来创建一个 AES 密码器对象,指定所需的 AES 算法、CBC 加密模式和密钥。然后,我们获取密码器的加密

    2024年01月24日
    浏览(48)
  • boringssl EVP_aes_128_ecb实现

    最近学习boringssl,发现没找到EVP_aes_128_ecb在哪里实现的 饶了一大圈,发现它的定义很无语 随便拿EVP_CIPHER_FUNCTION(128, cbc)展开 这里的 aes_128_cbc_generic 参考boringssl DEFINE_LOCAL_DATA 其实有方向的情况下可以用gcc -E ./src/crypto/fipsmodule/cipher/e_aes.c -o test.i -I include/ -E,只执行到预编译,直

    2024年02月10日
    浏览(31)
  • 【ios】【android】3DES_CBC_PKCS5Padding加密、解密问题(附完整代码)

    问题一:加密结果不一致 一、问题描述 实现了android的蓝牙对接后开始着手ios的蓝牙对接,出现了ios加密结果与在线加密的结果一致,而android的加密结果与甲方公司的结果一致的问题。 1.android部分代码如下: 2.ios部分代码如下: 二、问题解决 重新看了一遍android加密调用部

    2023年04月18日
    浏览(49)
  • ssh命令报错no matching cipher found. Their offer: aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc

    执行 ssh user@host 报错,信息如下: 协议不匹配 可以使用如下命令 ssh -c aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc user@host 也可以修改 ~/.ssh/config文件 vi ~/.ssh/config 增加配置 Ciphers +aes128-cbc,aes192-cbc,aes256-cbc

    2024年02月13日
    浏览(45)
  • AES-128-ECB php兼容高低版本

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包