Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加密种子/算法能否从编译代码中反向生成?_Java_Algorithm_Security_Encryption_Seed - Fatal编程技术网

Java 加密种子/算法能否从编译代码中反向生成?

Java 加密种子/算法能否从编译代码中反向生成?,java,algorithm,security,encryption,seed,Java,Algorithm,Security,Encryption,Seed,我最近学习了很多关于加密的知识,我正在考虑在我的一些Java网络应用程序中使用它。我的想法是在客户端应用程序和服务器应用程序上安装一个伪随机数生成器,它们都将向该算法传递相同的种子,以便生成相同的加密密钥。我的问题:如果有人对编译后的代码进行反向工程,他们是否有可能找到算法和/或种子?如果是的话,有什么办法来防范这种情况吗?我是用java开发的,我所看到的一些类似的问题不是很具体。一般来说,是的。但是你应该提供更多关于你的想法的信息,并阅读更多关于加密技术的最新进展 如果您的种子始终是相同的,硬

我最近学习了很多关于加密的知识,我正在考虑在我的一些Java网络应用程序中使用它。我的想法是在客户端应用程序和服务器应用程序上安装一个伪随机数生成器,它们都将向该算法传递相同的种子,以便生成相同的加密密钥。我的问题:如果有人对编译后的代码进行反向工程,他们是否有可能找到算法和/或种子?如果是的话,有什么办法来防范这种情况吗?我是用java开发的,我所看到的一些类似的问题不是很具体。

一般来说,是的。但是你应该提供更多关于你的想法的信息,并阅读更多关于加密技术的最新进展

如果您的种子始终是相同的,硬编码的,伪随机生成器将始终提供相同的数字序列,您的密钥将不安全


该算法通常是公开的,密钥与不对称技术共享(见Diffie Hellman简介),然后在运行时生成一个对称密钥,以加快消息加密的速度。

通常是这样。但是你应该提供更多关于你的想法的信息,并阅读更多关于加密技术的最新进展

如果您的种子始终是相同的,硬编码的,伪随机生成器将始终提供相同的数字序列,您的密钥将不安全


该算法通常是公开的,密钥与非对称技术共享(见Diffie Hellman简介),然后在运行时生成一个符号密钥,以加快消息的加密速度。

因此您决定采用加密技术。这是一个非常好和有价值的第一次洞察,这是不足以令人尊敬的

理论上:是。如果您的计算机能够执行它,那么它是确定的和有限的,因此代码的内部工作可以被检查和反向工程

在实践中:分解一个简单的Hello World示例需要花费大量的时间和精力。逆向工程更复杂的代码需要大量的时间、精力和知识。如果你的“产品”没有处理任何大量或有价值的信息,那么就不太可能有人真的花时间试图把它拆开

然而,由于你认为你的信息有足够的价值,你想加密它,总是假设其他人也会这样做,并且有必要的资源(时间,知识,和/或钱……)可以做。 几条建议:因为你显然开始研究密码学,你已经注意到这很难。更难做到正确。而且更难让它安全、有弹性

  • 一个好的加密算法不需要混淆。即使它的所有内部工作机制都是众所周知的,也能提供可靠的安全性。对于初学者和“专家”来说,这是一个常见的误解。很多人/公司都落入了这个陷阱,损失通常是严重的

  • 密码学要么全有要么全无。如果您的代码中有一个小错误,那么您所有的加密信息事实上不再是秘密。如果您的随机数生成器有bug,那么您的加密只不过是包装在礼物上的纸而已……即使是像OpenSSL这样著名的库也需要大量的bug修复、维护和审查

  • 不要发明自己的加密技术,以便在实时软件中使用。你可以把它写在纸上学习,也可以用一些例子来玩弄它。然而,设计、证明(数学)和实现我们目前使用的算法花费了大量的时间,这是有充分理由的

  • 研究已知算法的现有实现,并尝试找出它们是否得到良好维护和更新。学会理解它们并正确使用它们。(常见错误#2:程序员无法正确阅读和遵守库文档)

结论:一定要玩弄加密技术,了解它。但是,一定要在“真实”世界中使用成熟的实现,除非你真的讨厌你的用户。处理加密库/框架已经够难了。如果你愿意花相当多的时间和它在一起,就要深入细节


哦,还有逆向工程?别再关心那件事了。如果攻击者想这么做,他会的。但是,如果您的安全实现很好,他将不会从反向工程中受益

所以你决定使用加密技术。这是一个非常好和有价值的第一次洞察,这是不足以令人尊敬的

理论上:是。如果您的计算机能够执行它,那么它是确定的和有限的,因此代码的内部工作可以被检查和反向工程

在实践中:分解一个简单的Hello World示例需要花费大量的时间和精力。逆向工程更复杂的代码需要大量的时间、精力和知识。如果你的“产品”没有处理任何大量或有价值的信息,那么就不太可能有人真的花时间试图把它拆开

然而,由于你认为你的信息有足够的价值,你想加密它,总是假设其他人也会这样做,并且有必要的资源(时间,知识,和/或钱……)可以做。 几条建议:因为你显然开始研究密码学,你已经注意到这很难。更难做到正确。而且更难让它安全、有弹性

  • 一个好的加密算法不需要混淆。即使它的所有内部运作都是众所周知的