java - Java 中的加密和解密

标签 java encryption

我想将加密的密码存储在 Java 文件中。 我看到了一个使用 javax.crypto 的解决方案,但问题是关键 是动态生成的,它是随机的。

此密码将在运行时在 Java 程序中被获取和解密。 鉴于我要将一个已经加密的密码存储在一个文件中——我想得到 解密时的正确文本。

有没有办法告诉 javax.crypto 方法:

key = KeyGenerator.getInstance(algorithm).generateKey()

这可以用我自己根据某个私钥生成一次的 key 代替吗?

任何人都可以为我提供一些有关如何执行此操作的资源吗?

最佳答案

这是一个使用 javax.crypto 库和 apache commons 编解码器库在我寻找的 Base64 中进行编码和解码的解决方案:

import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import org.apache.commons.codec.binary.Base64;

public class TrippleDes {

    private static final String UNICODE_FORMAT = "UTF8";
    public static final String DESEDE_ENCRYPTION_SCHEME = "DESede";
    private KeySpec ks;
    private SecretKeyFactory skf;
    private Cipher cipher;
    byte[] arrayBytes;
    private String myEncryptionKey;
    private String myEncryptionScheme;
    SecretKey key;

    public TrippleDes() throws Exception {
        myEncryptionKey = "ThisIsSpartaThisIsSparta";
        myEncryptionScheme = DESEDE_ENCRYPTION_SCHEME;
        arrayBytes = myEncryptionKey.getBytes(UNICODE_FORMAT);
        ks = new DESedeKeySpec(arrayBytes);
        skf = SecretKeyFactory.getInstance(myEncryptionScheme);
        cipher = Cipher.getInstance(myEncryptionScheme);
        key = skf.generateSecret(ks);
    }


    public String encrypt(String unencryptedString) {
        String encryptedString = null;
        try {
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] plainText = unencryptedString.getBytes(UNICODE_FORMAT);
            byte[] encryptedText = cipher.doFinal(plainText);
            encryptedString = new String(Base64.encodeBase64(encryptedText));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return encryptedString;
    }


    public String decrypt(String encryptedString) {
        String decryptedText=null;
        try {
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] encryptedText = Base64.decodeBase64(encryptedString);
            byte[] plainText = cipher.doFinal(encryptedText);
            decryptedText= new String(plainText);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return decryptedText;
    }


    public static void main(String args []) throws Exception
    {
        TrippleDes td= new TrippleDes();

        String target="imparator";
        String encrypted=td.encrypt(target);
        String decrypted=td.decrypt(encrypted);

        System.out.println("String To Encrypt: "+ target);
        System.out.println("Encrypted String:" + encrypted);
        System.out.println("Decrypted String:" + decrypted);

    }

}

运行上面的程序结果如下:

String To Encrypt: imparator
Encrypted String:FdBNaYWfjpWN9eYghMpbRA==
Decrypted String:imparator

关于java - Java 中的加密和解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10303767/

相关文章:

python - PyCryptodome 错误 : MAC Check Failed

java - Android SQLite 中的 WHERE 子句

Java:如果另一个线程已经在其中,则新线程将跳过同步方法

java - 错误: No enclosing instance of type OOPTutorial is accessible

ios - 使用 NodeJS 解包 PKCS#7 数据负载?

security - 就安全性而言,散列和加密的顺序有什么区别吗?

java - 无法从解析中解码图像

python - 用 Python 加密

java - 适用于套接字流的C++/Java序列化库?

java - 使用 PreparedStatement 将日期插入 MySQL 数据库