Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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类正在显示加密密码 Common\00  mpCryptoPassword\00Ljava/lang/String\00 ConstantValue\00\00  KHETD645%3DJD$%(?!%*)5\00\00()V\00代码_Java_Class_Encryption_Password Encryption - Fatal编程技术网

Java类正在显示加密密码 Common\00  mpCryptoPassword\00Ljava/lang/String\00 ConstantValue\00\00  KHETD645%3DJD$%(?!%*)5\00\00()V\00代码

Java类正在显示加密密码 Common\00  mpCryptoPassword\00Ljava/lang/String\00 ConstantValue\00\00  KHETD645%3DJD$%(?!%*)5\00\00()V\00代码,java,class,encryption,password-encryption,Java,Class,Encryption,Password Encryption,我正在使用org.jasypt.encryption.pbe.StandardPBEStringEncryptor。我刚刚检查了我的编码类,发现它的字节码显示了我的加密密码KHETD645%3DJD$%(?!%*)5。我真的开始担心我所有数据的安全性。如果有人入侵我的类,那么我的数据会发生什么。为什么java类不将字符串名mpCryptoPassword和值KHETD645%3DJD$%(?!%*)5转换为字节码?那么您的代码中有一个字符串常量,其中包含用于加密的密码?如果是这样,字符串常量将不

我正在使用
org.jasypt.encryption.pbe.StandardPBEStringEncryptor
。我刚刚检查了我的编码类,发现它的字节码显示了我的加密密码
KHETD645%3DJD$%(?!%*)5
。我真的开始担心我所有数据的安全性。如果有人入侵我的类,那么我的数据会发生什么。为什么java类不将字符串名
mpCryptoPassword
和值
KHETD645%3DJD$%(?!%*)5
转换为字节码?

那么您的代码中有一个字符串常量,其中包含用于加密的密码?如果是这样,字符串常量将不会转换为字节码,因为没有可转换的内容。这是数据。这就是为什么使用硬编码的字符串常量来保证安全性很容易被破解。

为什么您的代码首先包含硬编码的密码?为什么不让用户选择存储在密钥库中的密码?编译不是加密,甚至不是很好的模糊处理。对于字节码这样的中间格式尤其如此,但即使是本机编译的代码,只要具备正确的技能,也可以进行反向工程。如果你需要你的应用程序访问私钥,那么没有任何真正的方法可以让私钥远离能够访问你的应用程序的足智多谋的个人。这只是关于安全性的基本事实之一。@Thomas这不是用户密码。此密码用于加密和解密。用户选择的密码不必用于访问系统。它也可以用于加密等-这取决于您的使用情况,但我假设您使用的是对称加密,即想要解密数据的人也需要知道密码。如果总是同一个用户,那么我不会将该密码存储在任何地方,如果是我使用您的应用程序,我也不想使用您知道的任何密码(即硬编码)。硬编码的加密密钥在代码中“隐藏”(无论它存储为PBE生成的字节[]密钥还是密码)是不安全的,如果您想真正加密某些内容,则不应使用。您真的应该后退一步,重新安排应用程序何时、如何加密数据以及使用什么密钥加密数据。仅仅对某些东西进行加密并不能保证它的安全。即使是“字节码”对相关方来说也不仅仅是毫无意义的字节。每一个可以执行的代码都可以被分析和逆向工程。这只是一个必要技能/资源的问题。一个人可以让它变得更难,但并非不可能。@JoachimSauer-->
一个人可以让它更难,但并非不可能
这就是我一直在寻找的,关于如何使其更难?@taronyu-->
字符串常量不会转换为字节码,因为没有任何东西可以转换
那么,如果不转换数据,Java会将什么转换为字节码?您的代码会转换为字节码。字节码是Java虚拟机执行的指令。虚拟机执行的不是数据。如果您真的必须在代码中存储类的密码,您也可以尝试使用某种加密来混淆它。就像可逆的位移位操作。然而,这并不能完全消除这个问题,它只会使问题变得更加困难。攻击者必须对解码逻辑进行反向工程。@user230名称字节码已经说明了这一点:它是从Java文本源转换为(中间)字节码(稍后可由JVM编译为机器码)的代码(即指令)。数据在任何情况下都将保持不变。
Common\00mpCryptoPassword\00Ljava/lang/String;\00
ConstantValue\00   \00KHETD645%3DJD$%(?!%*)5\00<init>\00()V\00Code