Java 数据加密标准

Java 数据加密标准,java,cryptography,bit-manipulation,user-input,bitstring,Java,Cryptography,Bit Manipulation,User Input,Bitstring,我们被要求编写的Java实现(用于加密和解密)。我有几个问题: DES指定应该有64位的纯文本或密文以及一个正好56位的共享密钥。给出字节数的方法是什么 该算法使用大量位级操作,例如将64位拆分为两个32位部分。如何做到这一点 无法使用现有的bouncycastle库: ? 您将在David Hook的“用Java开始加密”中找到许多使用此库的示例。您不能使用现有的bouncycastle库吗: ? 您将在David Hook的“用Java开始加密”中找到许多使用此库的示例。虽然这并不是您问题的

我们被要求编写的Java实现(用于加密和解密)。我有几个问题:

  • DES指定应该有64位的纯文本或密文以及一个正好56位的共享密钥。给出字节数的方法是什么

  • 该算法使用大量位级操作,例如将64位拆分为两个32位部分。如何做到这一点


  • 无法使用现有的bouncycastle库: ?


    您将在David Hook的“用Java开始加密”中找到许多使用此库的示例。

    您不能使用现有的bouncycastle库吗: ?


    您将在David Hook的“用Java开始加密”中找到许多使用此库的示例。

    虽然这并不是您问题的答案,但我必须指出:

    在大多数情况下,自己实现加密算法是一个非常糟糕的主意

    让我解释一下:

  • 密码学很难。很少有人能够很好地理解它,从而发明自己的算法,甚至他们也会寻求其他人的帮助来验证它是否在一秒钟内就可以破解

  • 即使在使用一个已经被证明对自己的意图来说足够好的现有算法时,这仍然是一个坏主意,因为有太多的可能会出现细微错误,从而破坏原本安全的算法的实现。这种情况已经发生了很多次,以至于我记不清发生了多少次

  • 即使您真的很幸运、很勤奋,并且获得了一个完美的实现,但不使用已经开发、测试和验证的现有实现也是浪费时间和资源

  • 还有一句关于DES的话,尽管我希望你们知道:对于今天的标准来说,纯DES被认为是很弱的。因此,您应该实现更好的3DES

    编辑: 好了,在谈了那么多之后,在意识到这似乎是一个家庭作业(感谢大家的提醒)之后,我对DES进行了一些研究。以下是我目前得到的信息:

    DES是一种分组密码,在64位块上运行。有几种不同的方法。它们确定如何将明文划分为64位块。有些模式需要,也就是说,用数据填充最后一个块,在解密密文后可以删除这些数据。上面Wikipedia文章中的Padding段落描述了如何在DES中使用Padding

    理论到此为止,如何在Java中实现这一点

    byte[] bytesOfString = clearTextString.getBytes();
    
    这将为必须加密的字符串提供一个字节数组。剩下的是简单的计数和相加


    我希望这个修改后的答案对你更有用。

    虽然这并不是你问题的答案,但我不得不说:

    在大多数情况下,自己实现加密算法是一个非常糟糕的主意

    让我解释一下:

  • 密码学很难。很少有人能够很好地理解它,从而发明自己的算法,甚至他们也会寻求其他人的帮助来验证它是否在一秒钟内就可以破解

  • 即使在使用一个已经被证明对自己的意图来说足够好的现有算法时,这仍然是一个坏主意,因为有太多的可能会出现细微错误,从而破坏原本安全的算法的实现。这种情况已经发生了很多次,以至于我记不清发生了多少次

  • 即使您真的很幸运、很勤奋,并且获得了一个完美的实现,但不使用已经开发、测试和验证的现有实现也是浪费时间和资源

  • 还有一句关于DES的话,尽管我希望你们知道:对于今天的标准来说,纯DES被认为是很弱的。因此,您应该实现更好的3DES

    编辑: 好了,在谈了那么多之后,在意识到这似乎是一个家庭作业(感谢大家的提醒)之后,我对DES进行了一些研究。以下是我目前得到的信息:

    DES是一种分组密码,在64位块上运行。有几种不同的方法。它们确定如何将明文划分为64位块。有些模式需要,也就是说,用数据填充最后一个块,在解密密文后可以删除这些数据。上面Wikipedia文章中的Padding段落描述了如何在DES中使用Padding

    理论到此为止,如何在Java中实现这一点

    byte[] bytesOfString = clearTextString.getBytes();
    
    这将为必须加密的字符串提供一个字节数组。剩下的是简单的计数和相加

    我希望这个修改后的答案对你更有用

  • 您现在应该知道8位=1字节。加密中的所有内容都是以位为单位工作的,除了定义缓冲区外,您永远不需要字节

  • 拆分使用。屏蔽下半部分的顶部位,移动上半部分的顶部位。我假设您已经有了引用,虽然它们是非常宝贵的资源,但您绝对必须知道按位运算是如何工作的。一个不会破坏项目的好资源是压缩算法,比如CABAC,因为它们同样是面向位的。然后关闭选项卡,尝试使用等级库制作自己的等级库

  • 您现在应该知道8位=1字节。加密中的所有内容都是以位为单位工作的,除了定义缓冲区外,您永远不需要字节

  • 拆分使用。屏蔽下半部分的顶部位,移动上半部分的顶部位。我假设您已经有了引用,虽然它们是非常宝贵的资源,但您绝对必须知道按位运算是如何工作的。一个不会破坏项目的好资源是压缩算法,比如CABAC,因为它们同样是面向位的。然后关闭选项卡,尝试使用等级库制作自己的等级库


  • 我相信harry很快就会回复的…:你试过什么,为什么不试