对于我当前的项目,我正在使用Java连接到MySQL数据库。
我有一些代码,其中我使用Gradle使用ReplaceTokens将敏感的数据库凭据替换为.java文件,以在构建目录中填充文件的新版本并提供该版本的源代码(替换后的“去标记的值)来编译.class文件。
除核心开发团队处理源.java文件外,我没有想到任何人,只有包含已编译的.class文件的.war。但是,通过使用vim看这些.class文件,我可以看出去标记化后的值在编译后的字节码中清晰可见。
我的问题是,假设有一个潜在的恶意代理可以从服务器中检索我的.class文件的情况,是否有更好的令牌化方法可以为数据库凭据提供另一层安全保护?
有关其他信息,MySQL DB仅通过套接字访问,因此我不希望恶意代理单独使用DB凭据可以做任何事情,但是无论如何我想尽可能地确定这些凭据
谢谢您的任何建议!总的来说,我对Java和Gradle还是很陌生,但是这个项目已经使我对可以完成的事情有很多了解。
答案 0 :(得分:1)
这是一些简单的代码,可以进行base64编码/解码
我将Blowfish
用于algo
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public static String encrypt(String text) throws Exception
{
SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), algo );
Cipher cipher = Cipher.getInstance(algo);
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, sksSpec);
byte[] encrypt_bytes = cipher.doFinal(text.getBytes());
return new String( Base64.encodeBase64(encrypt_bytes) );
}
public static String decrypt(String encrypt_str) throws Exception
{
SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), algo);
Cipher cipher = Cipher.getInstance(algo);
cipher.init(Cipher.DECRYPT_MODE, sksSpec);
return new String(cipher.doFinal( Base64.decodeBase64(encrypt_str.getBytes("UTF-8"))));
}