我正在用Java编写类似DES的分组密码。该密码适用于64位块,我很难决定如何对数据进行分区以使其可用。如果您想知道数据将来自文件,而我只是将其填充零,直到最接近的64倍数。这就是我一直在考虑的问题。
存储多头数组。
有了多头数组,我可以用最少的步骤遍历每个块。但是,逻辑运算(例如XOR)是否可以正常工作?另外,当我必须将64位分割为32位时,应该转换为整数还是继续使用long?然后有迹象表明需要担心,但是我认为我可以使用Long类来解决此问题。
存储字节数组的数组。
这是我最初的想法,但是现在我看到了局限性。我将不得不使用每个数组8个元素,而不是仅使用long数组。我不知道这可能无关紧要。
位集。
我看到了这些,并认为它们是我一直在寻找的答案,但是当我开始使用它们时,我意识到它们不适合当前的问题,并且许多方法实际上并没有按照我认为的那样做做。
我想知道更有经验的人会怎么做。我认为路途遥遥无期,但我想知道所有的算术方法是否都能奏效。我是在正确的轨道上还是有更好的方法?
您应该对密码使用最有效的原始类型。因此,如果您主要使用64位指令,请参阅long
。如果使用原始32位指令,则int
可能是最佳类型。我会让你猜测16位和8位操作的类型。
请注意,您不应将此接口直接呈现给外界。相反,您应该使用基于字节数组的接口(就像,例如Cipher
)。您不希望在用户使用大字节序,有符号/无符号等方面时遇到麻烦。此外,通常为特定大小的消息(以位或字节为单位)定义密码。
当然不使用BitSet
。这是一个具有许多特殊功能的可怕(无边界)界面。绝对不适合此类操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句