Java加密与硬编码密钥交替

DRJ*_*wer 9 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();
Run Code Online (Sandbox Code Playgroud)

但是,如果你是一个聪明的黑客(或者甚至可能是业余的,因为我发现了这一点),你所要做的就是打开包含这段代码的类文件,加密密钥(My Encryption Key98)清晰可见.

你如何加密加密密钥?......大声笑......你呢?

谢谢你的帮助!

Sjo*_*erd 6

如果攻击者可以访问软件和文件,它可以解密它.有一些方法可以解决这个问题:

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

如果程序需要加密和解密数据,那么你无能为力.攻击者可以简单地运行程序并查看解密的信息.