我正在创建一个需要使用Windows Universal SDK加密某些数据的应用。
我有代码,而且看起来都不错,我正在使用AesCbcPkcs7算法。我对代码没有任何问题,但我不明白的是“Aes”后的“CbcPkcs7”究竟是什么意思。我指的是Windows.Security.Cryptography.Core.SymmetricAlgorithmNames
下的算法名称
像那些......
AesCbc
AesCcm
AesEcb
AesEcbPkcs7
AesGcm
答案 0 :(得分:1)
AES是块密码,因此只能 加密固定大小的块(16字节)。
加密多个块需要mode of operation。例如,ECB分别在明文的每个块上应用块密码以获得密文块。 ECB存在问题,因为它在语义上不安全,因此使用随机初始化向量的CBC模式最好在大多数时间使用。更好的是像GCM这样的经过验证的模式,它不仅提供机密性,还提供完整性/真实性。
这仍然不够,因为像CBC这样的模式只允许您加密块大小的倍数的明文。需要填充方案来将明文填充到块大小的下一个倍数,以便加密任何长度的明文。 PKCS#7填充通过附加字节来工作,每个字节的值表示附加字节的数量。
CTR和GCM等模式都是流模式,因此不需要填充模式来加密任意长度的明文。