How do I encrypt/decrypt a string with another string as a password?

前端 未结 2 820
猫巷女王i
猫巷女王i 2021-02-02 04:03

I\'m making a simple program that takes text entered in a text box, and takes a password that\'s in another text box, then does some sort of simple encryption on it and saves it

相关标签:
2条回答
  • 2021-02-02 04:13

    What you really need is Symmetric cryptography, i.e., the algorithm uses same key to encrypt and decrypt the data. There are many algorithms available which support symmetric cryptography like DES, AES.

    Have a look at this example: http://www.java2s.com/Code/Java/Security/EncryptionanddecryptionwithAESECBPKCS7Padding.htm

    In the above example, replace

    byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 };
    

    with

    byte[] keyBytes = yourPassword.getBytes();
    

    It uses the bouncycastle library, which is arguably the best cryptography libraries available.

    0 讨论(0)
  • 2021-02-02 04:17

    You're trying to re-invent the wheel. Unless you're doing it for fun, I'd recommend using something like AES. If you just google "AES in java" you'll find a number of examples.

    If you are doing it for fun and want something simple to implement, have a look at ROT13 as well.

    Here's an example for AES in Java:

    private static final String ALGORITHM = "AES";
    private static final byte[] keyValue = 
        new byte[] { 'T', 'h', 'i', 's', 'I', 's', 'A', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y' };
    
     public String encrypt(String valueToEnc) throws Exception {
        Key key = generateKey();
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encValue = c.doFinal(valueToEnc.getBytes());
        String encryptedValue = new BASE64Encoder().encode(encValue);
        return encryptedValue;
    }
    
    public String decrypt(String encryptedValue) throws Exception {
        Key key = generateKey();
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedValue);
        byte[] decValue = c.doFinal(decordedValue);
        String decryptedValue = new String(decValue);
        return decryptedValue;
    }
    
    private static Key generateKey() throws Exception {
        Key key = new SecretKeySpec(keyValue, ALGORITHM);
        return key;
    }
    

    You may want to improve on this code.

    0 讨论(0)
提交回复
热议问题