Java 加密替代硬编码 key

标签 java encryption

我是加密新手。

我查看了 javax.crypto 文档并使用此代码加密了一个文件...

File saveFile = new File("Settings.set");
        saveFile.delete();
        FileOutputStream fout = new FileOutputStream(saveFile);

        //Encrypt the settings
        //Generate a key
        byte key[] = "My Encryption Key98".getBytes();
        DESKeySpec desKeySpec = new DESKeySpec(key);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey skey = keyFactory.generateSecret(desKeySpec);

        //Prepare the encrypter
        Cipher ecipher = Cipher.getInstance("DES");
        ecipher.init(Cipher.ENCRYPT_MODE, skey);
        // Seal (encrypt) the object
        SealedObject so = new SealedObject(this, ecipher);

        ObjectOutputStream o = new ObjectOutputStream(fout);
        o.writeObject(so);
        o.close();

但是,如果您是一个聪明的黑客(或者甚至是业余爱好者,因为我已经弄明白了),您所要做的就是打开包含此代码的类文件,并且加密 key (我的加密 key 98)是清晰可见的.

如何加密加密 key ? ...大声笑...你可以吗?

感谢您的帮助!

最佳答案

如果攻击者可以同时访问软件和文件,则可以对其进行解密。有一些方法可以解决这个问题:

  • 使用非对称 key 。用公钥加密文件,只能用私钥解密。这假设软件不需要解密文件。
  • 使用 Diffie-Hellman 交换。如果您想通过网络发送一段加密的数据,双方可以在攻击者不知道的情况下建立一个 key 。

如果程序需要同时对数据进行加密和解密,则您无能为力。攻击者可以简单地运行程序并查看解密后的信息。

关于Java 加密替代硬编码 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3188171/

相关文章:

java.lang.reflect.MalformedParameterizedTypeException 试图向 API 发出请求

java - Android ActionBar - 尽管 API 级别 14,但属性 showAsAction 没有资源

java - 0-1多维背包

c# - 用java在C#中解密AES加密文件

javascript - bcrypt 如何比较密码与不同生成的盐?

Android——加密与解密

android - 在 Android 应用程序中存储 secret 和凭据

java - 在Android Studio(2.1.3)中进行调试时找不到本地变量

java - 了解jboss框架-URL

delphi - LockBox Stream 读取错误,RSA