在Android上从随机文本创建密钥

时间:2013-06-14 16:18:27

标签: java android encryption

我有一点问题。在我的应用程序中,我需要从用户编写的String中创建AES加密密钥,我不知道该怎么做。例如:用户写道:“abscde”,我需要一些如何将其更改为AES密钥。这是我的代码。它可以工作,但只能使用十六进制提供的密钥,如“000102030405060708090A0B0C0D0E0F”。

   public static String encrypt(String text, String key){
        String mess="error";
        try{

            byte[] encodedText=text.getBytes(Charset.forName("UTF-8"));
            byte[] keyData=hexStringToByte(key);

            SecretKeySpec sKey=new SecretKeySpec(keyData, "AES");

            Cipher encryptionCypher=Cipher.getInstance("AES/CBC/PKCS5Padding");

            final int blocks=encryptionCypher.getBlockSize();

            final byte[] ivData=new byte[blocks];

            final SecureRandom rnd=new SecureRandom();

            rnd.nextBytes(ivData);

            final IvParameterSpec iv=new IvParameterSpec(ivData);
            encryptionCypher.init(Cipher.ENCRYPT_MODE, sKey,iv);

            final byte[] encryptedMessage=encryptionCypher.doFinal(encodedText);
            final byte[] ivAndMessage=new byte[ivData.length+encryptedMessage.length];
            System.arraycopy(ivData, 0, ivAndMessage, 0, blocks);
            System.arraycopy(encryptedMessage, 0, ivAndMessage, blocks, encryptedMessage.length);
            final String finalMessage=Base64.encodeToString(ivAndMessage, 0);

            mess=finalMessage;  


            } catch (IllegalBlockSizeException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (BadPaddingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                e.printStackTrace();

            } catch (InvalidAlgorithmParameterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        return mess;
    }

0 个答案:

没有答案