java中的密码填充字符串是啥

Posted

技术标签:

【中文标题】java中的密码填充字符串是啥【英文标题】:What are the cipher padding strings in javajava中的密码填充字符串是什么 【发布时间】:2012-06-11 16:47:35 【问题描述】:

每个人都在谈论密码中的填充方案,但是需要传递给密码的实际字符串是什么?我不在乎它们是对称的还是不对称的,我只想要一个可能值的列表。

【问题讨论】:

这将是一个无限列表。 你说的是盐吧?这些通常是唯一的,并且可能是随机生成的。 不谈盐。我想要一个可能的填充列表,例如:NOPADDING、ANSIX923Padding、PKCS5Padding、PKCS7Padding、ISO10126Padding 等。为什么没有包含在内的列表? 这个问题表面上似乎要求在填充中使用实际字节,而不是算法标识符。 @bmargulies 怎么样? what are the actual strings 在问题中是明确的! 【参考方案1】:

填充有多种类型,PKCS-7、零、ISO 10126、ANSI X.923 等。 我建议你阅读padding,因为你似乎没有完全理解这个概念。

那么您可能指的是密码salt。

编辑 Java 平台的每个实现都需要支持以下标准密码转换,括号中的密钥大小:

AES/CBC/NoPadding (128) AES/CBC/PKCS5Padding (128) AES/ECB/NoPadding (128) AES/ECB/PKCS5Padding (128) DES/CBC/NoPadding (56) DES/CBC/PKCS5Padding (56) DES/ECB/NoPadding (56) DES/ECB/PKCS5Padding (56) DESede/CBC/NoPadding (168) DESede/CBC/PKCS5Padding (168) DESede/ECB/NoPadding (168) DESede/ECB/PKCS5Padding (168) RSA/ECB/PKCS1Padding (1024, 2048) RSA/ECB/OAEPWithSHA-1AndMGF1Padding(1024、2048) RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

你可以找到一个列表here。

编辑 2 您可以找到 Bouncy Castle 规范 here。它列出了所有可用的填充方案。

【讨论】:

我确实理解这个概念并且有很多类型。我很难找到在给定情况下使用的有效字符串。我也明白什么是盐了!如果它包含指向有效字符串列表的链接,您的答案会很有帮助。 您似乎没有完全理解这个概念,因为您要求的是“有效的字符串列表”。对于每种类型的填充,“列表”会有所不同。对于零填充,它非常简单:0、00、000、0000、0000 等。您需要阅读不同类型的填充。 请向我解释为什么我将算法、模式和填充作为字符串传递给提供者以获取密码实例?即:“AES/CTR/PKCS5Padding” 谢谢,我有所有的算法和模式,我只需要一个完整的填充方案列表。这个列表是所有 Java 平台的基本实现,显然还有其他的。特别是,我使用 Bouncycastle 与 Microsoft 堆栈进行互操作。你能指出他们填充方案的方向吗?他们的文档没有列出他们接受的可能字符串,至少不是我能找到的。【参考方案2】:

块密码需要填充,流密码不需要。块密码需要填充,因为它们会加密整个块,并且您的消息可能与整个块数不完全匹配。填充用于将消息长度扩展到下一个块边界。

有关详细信息,请参阅Cryptographic padding 上的***文章。

在大多数情况下,使用 PKCS#7(又名 PKCS#5)填充:n 字节,所有值 n:

01
02 02
03 03 03
...
10 10 10 10 ... 10 10

【讨论】:

以上是关于java中的密码填充字符串是啥的主要内容,如果未能解决你的问题,请参考以下文章

用重复的字符串填充数组 - JAVA

如何在java中的字符串中填充空格? [复制]

java - 拆分字符串后,数组中的第一个元素是啥?

java中的转义字符的作用是啥?

Java 9 的版本字符串方案中的第 4 个数字是啥意思?

设置可以注入的填充对象的最佳方法是啥?