有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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) 个答案

  1. # 1 楼答案

    你不能;您只需发挥优势(这对您有利,因为填充算法的复杂性使得密码文本非常非随机(数据真实性检查方面))

    原因是您输入的数据有无限多个组合,其中确实包括解密后会产生有效结果的组合(但从未真正加密)

    无论某些组合多么罕见infinity都有它

    并且只包含base64字符意味着它只包含base64字符;没别的了。(这绝对不意味着它是加密数据!)

  2. # 2 楼答案

    好的,有了您编写的代码,您可以相当自信地通过checking if it's a valid Base64 encoding得到一个加密字符串

    但是,从广义上讲,如果您可以通过查看字符串来确定字符串是否被加密,这意味着加密非常弱。正确加密的数据无法从随机噪声中分辨出来

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

  3. # 3 楼答案

    这可以通过两种方式实现

    1. 无论如何,您可能已经为加密和解密编写了一些逻辑。现在您可以尝试解密,看看它是否正确解密
    2. 您可以尝试使用base64进行解码,并查看是否可以毫无例外地进行解码。代码如下所示

      在此处输入代码

    &13; 第13部分,;
    private boolean isBase64(String input)
    	{
    		try 
    		{
    			new String(Base64.getDecoder().decode(input));
    			return true;
    		} 
    		catch (Exception e) 
    		{
    			return false;
    		}
    	}
      
    和#13;
    和#13;