格式良好的String作为使用错误密钥AES的解密输出

时间:2015-07-19 01:29:57

标签: java encryption cryptography aes

我正在搜索一种已知的加密算法,该算法可以让我使用密钥加密数据,如果使用其他密钥解密数据,则会为我提供与第一项不同的数据。这是字符串数据。我尝试过AES,但问题是使用错误密钥解密的结果会产生大量无效符号,因此生成的字符串与使用良好密钥给出的结果不同。

有解决方法吗?

到目前为止我这样做了:

private static final String truc = "f41a3ff27aab7d5c";


public static String encryptPass(String pass,String key) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException, InvalidAlgorithmParameterException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(key.getBytes("UTF-8"));
        byte[] digest = md.digest();
        BCrypt bcrypt = new BCrypt();
        SecretKey keyL =  new SecretKeySpec(digest, "AES");

        Cipher AesCipher = Cipher.getInstance("AES/CTR/NoPadding");
        AesCipher.init(Cipher.ENCRYPT_MODE, keyL, new IvParameterSpec(truc.getBytes()));
        byte[] encVal = AesCipher.doFinal(pass.getBytes());
        pass = Base64.encodeToString(encVal, Base64.DEFAULT);

        Log.i("ADA", "encoded pass: " + pass);

        return pass;
    }

    public static String decryptPass(String encPass , String key) throws NoSuchAlgorithmException, UnsupportedEncodingException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(key.getBytes("UTF-8"));
        byte[] digest = md.digest();

        SecretKey keyL =  new SecretKeySpec(digest, "AES");
        Cipher AesCipher = Cipher.getInstance("AES/CTR/NoPadding");
        AesCipher.init(Cipher.DECRYPT_MODE, keyL, new IvParameterSpec(truc.getBytes()));
        byte[] decodedValue = Base64.decode(encPass, Base64.DEFAULT);
        byte[] decValue = AesCipher.doFinal(decodedValue);
        String decryptedValue = new String(decValue);
        Log.i("ADA", "decrpyted pass: " + decryptedValue);

        return decryptedValue;
    }

阅读the answer of MaybeWeCouldStartAVar后,最后一段我使用了“AES / CTR / NoPadding”。

当我说一个结构良好的字符串时,我期待的主要是ASCII字符32到125.

那里有什么东西可以满足我的需求,或者我应该只使用我自己的加密算法(我听说不建议但是如果这是我唯一的选择......)

我不是要限制对任何数据的访问。任何使用该应用程序的人都可以完全看到数据,但除非他们拥有正确的密钥,否则他们应该看到错误的数据(显然看起来并不错误)。 这个想法是为了抑制蛮力。

0 个答案:

没有答案