基于SKF基础学习相关知识梳理(一)

(一)对称密码算法

// 分组密码参数
typedef struct Struct_BLOCKCIPHERPARAM{
	BYTE  IV[MAX_IV_LEN];  // 初始向量,MAX_IV_LEN 为初始化向量的最大长度   (#define MAX_IV_LEN 32)
	ULONG IVLen; // 初始向量实际长度(按字节计算)
	ULONG PaddingType; // 填充方式,0 表示不填充,1 表示按照PKCS#5 方式进行填充
	ULONG FeedBitLen;  // 反馈值的位长度(按位计算)只针对 OFB、CFB 模式
} BLOCKCIPHERPARAM, *PBLOCKCIPHERPARAM;

1、PKCS填充方式

  PKCS(Public Key Cryptography Standards),公钥加密标准,是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。其常见的填充方式有以下几种:(例如块大小为 8bytes,数据不足,需要填充)

(1)填充数据为填充字节的长度

这种填充方式中,填充的所有字节值都为需要填充字节的长度。

如:现有3bytes,块大小为8bytes,需要填充5bytes,即以5来填充
原数据:66 6F 72
填充后的数据:66 6F 72 05 05 05 05 05

(2)填充数据为0x80后加0x00

这种填充方式中,填充字符串的第一个字节数是0x80,后面的每个字节是0x00。

如:现有3bytes,块大小为8bytes,需要填充5bytes,则第一个为 80,后面的全部为 00
原数据:66 6F 72
填充后的数据:66 6F 72 80 00 00 00 00

(3)填充数据的最后一个字节为填充字节序列的长度

这种填充方式中,填充字符串的最后一个字节为填充字节的长度, 其它为0×00。

如:现有3bytes,块大小为8bytes,需要填充5bytes,则最后一个为 05,其他全部为 00
原数据:66 6F 72
填充后的数据:66 6F 72 00 00 00 00 05

(4)填充数据为0x00

这种填充方式中,填充的所有字节值都为0x00。

如:现有3bytes,块大小为8bytes,需要填充5bytes,则填充的全部为 00
原数据:66 6F 72
填充后的数据:66 6F 72 00 00 00 00 00

(5)填充数据为空格(0x20)

这种填充方式中,填充的所有字节值都为空格0x20。

如:现有3bytes,块大小为8bytes,需要填充5bytes,则填充的全部为 20
原数据:66 6F 72
填充后的数据:66 6F 72 20 20 20 20 20

2、PKCS填充分类

(1)PKCS5Padding(对称加密最常用)

将数据填充到8的倍数,填充数据计算公式是,如原数据长度为len,利用该方法填充后的长度是 len + (8 - (len % 8)), 填充的数据长度为 8 - (len % 8),块大小固定为8字节,填充方式为上面的填充数据为填充字节的长度。

(2)PKCS7Padding(对称加密最常用)

假设需要填充n (n>0) 个字节才对齐,填充n个字节,每个字节都是n ;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小;PKCS7填充字节的范围在 **1-255 **之间 ,填充方式为上面的 填充数据为填充字节的长度。

(3)PKCS1Padding(RSA加密最常用)

PKCS#1(v1.5)中规定,如果使用PKCS1Padding进行填充,当RSA的密钥长度是1024b,则原文数据最多117B。若原数据不满足长度要求,则需要在加密前进行填充,填充公式为:

EB = 00 || BT || PS || 00 || D :
EB :填充后的数据
D :原消息数据
BT:The block type 块类型,取值为 00 or 01 (私钥运算时),取值为 02 (公钥运算时)
PS:The padding string填充字符串,长度为 Len(EB) - 3 - Len(D),最少是 8字节。
BT=00,PS为00
BT=01,PS为FF
BT=02,PS为伪随机生成,非零
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蕊瑞琳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值