如何检查字符串是否在java中加密?

时间:2015-05-19 06:54:20

标签: java encryption

我使用以下代码加密我的数据:

public static String encrypt(String clearData, String password)
            throws UnsupportedEncodingException {
        byte[] bytes = encrypt(clearData.getBytes("UTF-8"), password);
        return Base64.encodeBytes(bytes);
    }


public static byte[] encrypt(byte[] clearData, String password)
            throws UnsupportedEncodingException {
        byte[] passwordKey = encodeDigest(password);
        try {
            aesCipher = Cipher.getInstance(CIPHER_TRANSFORMATION);
        } catch (NoSuchAlgorithmException e) {
            Log.e(TAG, "No such algorithm " + CIPHER_ALGORITHM, e);
        } catch (NoSuchPaddingException e) {
            Log.e(TAG, "No such padding PKCS5", e);
        }
        secretKey = new SecretKeySpec(passwordKey, CIPHER_ALGORITHM);

        try {
            aesCipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
        } catch (InvalidKeyException e) {
            Log.e(TAG, "Invalid key", e);
            return null;
        } catch (InvalidAlgorithmParameterException e) {
            Log.e(TAG, "Invalid algorithm " + CIPHER_ALGORITHM, e);
            return null;
        }

        byte[] encryptedData;
        try {
            encryptedData = aesCipher.doFinal(clearData);
        } catch (IllegalBlockSizeException e) {
            Log.e(TAG, "Illegal block size", e);
            return null;
        } catch (BadPaddingException e) {
            Log.e(TAG, "Bad padding", e);
            return null;
        }
        return encryptedData;
    }

如何在不使用try-catch的情况下检查输入字符串数据是否已加密?

更新

例如,用户给了我一个字符串。如果它是加密的,我将它存储在数据库中,如果不是我加密然后存储。

3 个答案:

答案 0 :(得分:5)

嗯,使用您编写的代码,您可以相当确信您已经通过checking if it's a valid Base64 encoding获得了加密字符串。

然而,从广义上讲,如果你只是通过查看就可以确定字符串是加密的,那就意味着加密非常弱。正确加密的数据与随机噪声无法分辨。

如果用户可以向您发送任意加密或明文数据,他们需要告诉您它是什么。

答案 1 :(得分:0)

你不能;您可以只玩几率(由于填充算法的复杂性,使得密文变得非常非随机(数据真实性检查),因此很适合您。

原因是您输入的数据具有无限数量的组合,这些组合的确包含在解密后会产生有效结果的组合(但从未真正加密过);

infinity的某些组合无论多么稀有。

,并且仅包含base64字符,这意味着它仅包含base64字符;而已。 (这绝对不意味着它是加密数据!)

答案 2 :(得分:-1)

这可以通过两种方式完成。

  1. 无论如何,您可能已经编写了一些用于加密和解密的逻辑。现在,您可以尝试解密了,看看天气是否正确解密。
  2. 您可以尝试使用base64进行解码,并查看天气情况,您可以毫无例外地做到这一点。代码如下。

    在此处输入代码

private boolean isBase64(String input)
	{
		try 
		{
			new String(Base64.getDecoder().decode(input));
			return true;
		} 
		catch (Exception e) 
		{
			return false;
		}
	}