运行是输入密码,这样别人也可以通过密码解密代码,请问是否可以避免,谢谢
你有什么好建议呢,或者说你想要达到的效果是怎样?
主要是我考虑到,运行的时候输入了密码,这样对方可以根据密码进行解密操作,起不到保护代码的作用。我目前也没有比较好的方案。
这个工具的使用场景是运维 实施 或者开发者为客户本地化部署服务时先把jar加密了 然后在客户本地服务端运行 因为密码是自己掌握 所以别人能解密的难度是比较大的 可能你的场景不一样 并不是把加密好的jar和密码都给别人
不知道我理解的是否正确,我看说明中运行时,必须输入密码。谢谢 1、// 命令行运行JAR 因为程序要发布给客户,由于运行时需要输入密码,这样密码如果不给客户,客户无法运行程序 java -jar /path/to/encrypted.jar 2、// 在提示输入密码的时候输入密码后按回车即可正常启动,也可以通过传参的方式直接启动 此种情况,也是需要把密码写入到命令行中的,这样的话是不是密码就泄露了。 java -jar /path/to/encrypted.jar --xjar.password=PASSWORD
我理解你的担心,所以XJar针对的场景是公司有自己的运维或实施去给客户部署,然后要求只有他们自己知道密码而且采用第一种方式来启动。接下来我也会考虑更优化的方案来避免这种问题。
请问下那个XJarLauncher,具体是如何使用的,这边我看到有自定义classloader,然后具体是如何使用呢,请教下哈
这样的使用场景,如果公司的运维去客户现场用密码解密jar包的话,得到的是基本明文的class文件,然后客户那边的懂技术的还是可以通过反编译工具来反编译源码,从而达不到保护源码的目的。
不是这样的哦,并不需要解密jar包,只不过我们在客户的服务器上部署的时候通过一个密码来启动了程序,解密的过程是程序在内存中按需执行的,即加载某个class时当class时加密了的才在内存中解密并加载,源码并不会泄露,因为磁盘中不可能会有解密了的class,客户那边懂技术的人拿到的jar永远是加密了的。
哦...终于明白了你这个使用场景了,是针对的是springboot这种可以将应用服务器都打成可执行的文件或者是可执行的jar包,都可以 可以通过定制的过滤器来过滤jar包,来指定不加密或者不解密的资源。
哈哈哈 都怪我文档写的不好,明白了就好:)
这里的密码其实可以修改成 提交数字证书的形式,这样的话就不会给客户看到明文密码了,数字证书了解一下,类似非对称加解密,私钥加密,公钥解密,还可以设置过期时间。
没想到怎么做,说下你的思路呢
这里使用java自带的keystore生成一对自己签名的公钥和私钥,这一对秘钥,公钥给客户解密用,私钥就是我们用来加密需要。这样使用的时候,直接指定私钥文件的路径就可以啦,这样在你的应用上直观上就不用输入明文密码了。体现在这就是在使用的时候不用输入明文密码,保证密钥安全
那怎么避免客户拿着公钥去解密class呢?
哈哈,你俩聊得好欢乐.....
大神,如果springboot后台运行,例如 java -jar /path/to/encrypted.jar --xjar.password=PASSWORD & 。但是这样的话,通过ps -ef 不就可以发现密码了吗?有什么办法可以解决
启动时不指定密码 运行过程中输入密码
启动时不指定密码 运行过程中输入密码
启动是不指定密码?不太理解,因为我加密jar后,不输入密码直接运行的话,是会报错终止的。能描述大概步骤吗? 我现在的脚本如下: #!/bin/sh java -jar -Dspring.profiles.active=test /path/to/encrypted.jar --xjar.password=PASSWORD > /path/to//out.x.file 2>&1 & 但是这样执行ps -ef就会出现密码了
不加 --xjar.password=PASSWORD 参数会报错终止?
不加 --xjar.password=PASSWORD 参数会报错终止?
通过脚本使用后台运行jar,不加--xjar.password=PASSWORD 就会报错的
错误如下:
Exception in thread "main" java.lang.NullPointerException
at io.xjar.boot.XBootLauncher.
版本多少
版本多少
maven插件编译,1.0.8
你这种启动方式 在程序运行时无法获取当前的控制台 java.io.Console 也就无法获取输入的密码 你试试 java -jar -Dspring.profiles.active=test /path/to/encrypted.jar 这样启动
你这种启动方式 在程序运行时无法获取当前的控制台 java.io.Console 也就无法获取输入的密码 你试试 java -jar -Dspring.profiles.active=test /path/to/encrypted.jar 这样启动
如果这样执行的话,无法是程序在后台运行的,还有什么办法吗?
目前没有
目前没有
那请问你们现在的jar是怎么运行的?业务场景是怎么样的? 打开命令窗口运行jar,然后输入密码,命令窗口不关闭?
是的 这种方式是最安全的 但也不是绝对安全
或者你可以尝试 使用 javaw 命令 加密码参数 来启动试试
javaw
用的是centos,没有javaw命令o(╥﹏╥)o
或者你可以尝试 使用 javaw 命令 加密码参数 来启动试试
我重写了XBootLauncher这个类,通过其他方式传入xjar.password参数,从而简单实现了可以后台运行和ps -ef看不到命令进程了(^-^)V