在密码术中,PKCS#7填充是一种填充方案,它添加了字节数N≥1,其中每个添加字节的值等于N。
例如,Hello, World!
具有13个字节的,以十六进制表示如下:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
如果我们选择将PKCS#7填充长度为16,则结果为:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03
如果我们选择填充长度为20,则结果为:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 07 07 07 07
请注意,在第一个示例中,我们添加了三个03
字节,在第二个示例中,我们添加了七个07
字节。
您的任务将是验证字符串(或整数数组)是否具有正确的PKCS#7填充。也就是说,如果输入字符串的最后一个字节为N,则您的程序应检查字符串的最后N个字节等于N。
输入项
单个非空ASCII字符串,包含介于代码点1和127(含1和127)之间的字符。如果愿意,可以将输入作为整数数组代替。
输出量
甲truthy值,如果输入字符串具有有效的PKCS#7填充,否则falsy值。
功能和完整程序都可以接受。这是code-golf,所以目的是最大程度地减少代码中的字节数。
测试用例
此处显示输入的整数数组版本-对于以下许多测试用例,字符串版本将具有不可打印的字符:
真相:
[1]
[1, 1]
[2, 1]
[2, 2]
[5, 6, 5, 3, 3, 3]
[1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2]
[95, 115, 80, 32, 71, 7, 122, 49, 13, 7, 7, 7, 7, 7, 7, 7, 7]
[27, 33, 54, 65, 97, 33, 52, 55, 60, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
[15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15]
虚假:
[2]
[1, 2]
[5, 5, 5, 5]
[5, 6, 5, 4, 4, 4]
[3, 3, 3, 94, 3, 3]
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 127]
[50, 39, 94, 105, 49, 29, 74, 102, 2, 106, 44, 7, 7, 7, 7, 7, 7]
[26, 27, 59, 25, 122, 110, 20, 30, 114, 6, 9, 62, 121, 42, 22, 60, 33, 12]
7
s 结尾的真实测试用例平行)。您可以将其视为剥离后的结果[1 2 3]
。
[1 2 3 3 3 3]
真还是假?我认为这应该是真实的,但我并不乐观。