.NET TripleDESCryptoServiceProvider equivalent in Java

后端 未结 4 671
温柔的废话
温柔的废话 2020-12-25 09:26

Please, just don\'t ask me why. I just have this code in .NET that encrypt/decrypt strings of data. I need now to make \'exactly\' the same funcionality in java. I have trie

4条回答
  •  無奈伤痛
    2020-12-25 09:45

    Try the following. For actual usage, I would get a base64 library like commons codec or use the codec that comes with BouncyCastle

    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.security.NoSuchAlgorithmException;
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.IvParameterSpec;
    
    public class Encryption {
    
        private static SecretKey sharedkey;
        private static byte [] sharedvector;
    
        static {
            int keySize = 168;
            int ivSize = 8;
            try {
                KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
                keyGenerator.init(keySize);
                sharedkey = keyGenerator.generateKey();
    
                sharedvector = new byte [ivSize];
                byte [] data = sharedkey.getEncoded();
    
                int half = ivSize / 2;
                System.arraycopy(data, data.length-half, sharedvector, 0, half);
                System.arraycopy(sharedvector, 0, sharedvector, half, half);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String [] args) throws Exception {
            System.out.println(Decrypt(Encrypt("Hello World")));
    
        }
    
        public static String Encrypt(String val) throws GeneralSecurityException {
            Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, sharedkey, new IvParameterSpec(sharedvector));
    
            return new sun.misc.BASE64Encoder().encode(cipher.doFinal(val.getBytes()));
        }
    
        public static String Decrypt(String val) throws GeneralSecurityException, IOException {
            Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, sharedkey, new IvParameterSpec(sharedvector));
    
            return new String(cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(val)));
        }
    
    }
    

提交回复
热议问题