当前位置: 首页 > 面试题库 >

将Key转换为String并返回Key Java

穆鸿卓
2023-03-14
问题内容

因此,我尝试将Key转换为字符串,以便可以使用System.out显示它,然后将其转换回Key。我可以使用BASE64Encoder将其转换为字符串,但是在将其转换回时遇到问题。这是我的源代码:

    public class Encryption extends Applet {
    Key keyOrig;
    BASE64Decoder decoder = new BASE64Decoder();
    BASE64Encoder encoder = new BASE64Encoder();

    public void init() {
        try {
            keyOrig = generateKey();

            String keyString = encoder.encode(keyOrig.getEncoded());
            System.out.println("Key: "+keyString);

            Key key = new SecretKeySpec(keyString.getBytes(),0,keyString.getBytes().length, "DES");

            String message = "This is hacker proof!";
            System.out.println("Message is: "+message);

            String encryptedMessage = encrypt(message,key);
            System.out.println("Message encrypted: "+ encryptedMessage);

            String decryptedMessage = decrypt(encryptedMessage,key);
            System.out.println("Message decrypted: "+ decryptedMessage);



        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Key generateKey() throws NoSuchAlgorithmException {
        KeyGenerator generator;
        generator = KeyGenerator.getInstance("DES");
        generator.init(new SecureRandom());
        return keyOrig = generator.generateKey();
    }

    @SuppressWarnings("unused")
    public String encrypt(String message, Key key)
            throws IllegalBlockSizeException, BadPaddingException,
            NoSuchAlgorithmException, NoSuchPaddingException,
            InvalidKeyException, UnsupportedEncodingException {
        // Get a cipher object.
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);

        // Gets the raw bytes to encrypt, UTF8 is needed for
        // having a standard character set
        byte[] stringBytes = message.getBytes("UTF8");

        // encrypt using the cypher
        byte[] raw = cipher.doFinal(stringBytes);

        // converts to base64 for easier display.
        @SuppressWarnings("restriction")
        BASE64Encoder encoder = new BASE64Encoder();
        String base64 = encoder.encode(raw);

        return base64;
    }

    public String decrypt(String encrypted, Key key) throws InvalidKeyException,
            NoSuchAlgorithmException, NoSuchPaddingException,
            IllegalBlockSizeException, BadPaddingException, IOException {

        // Get a cipher object.
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, key);

        // decode the BASE64 coded message
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] raw = decoder.decodeBuffer(encrypted);

        // decode the message
        byte[] stringBytes = cipher.doFinal(raw);

        // converts the decoded message to a String
        String clear = new String(stringBytes, "UTF8");
        return clear;
    }
}

问题答案:

您永远不会使用BASE64Decoderun-base-64您的字符串。

替换为:

        Key key = new SecretKeySpec(keyString.getBytes(),0,keyString.getBytes().length, "DES");

        byte[] encodedKey = decoder.decodeBuffer(keyString);
        Key key = new SecretKeySpec(encodedKey,0,encodedKey.length, "DES");


 类似资料:
  • 我希望代码得到一个int作为参数,如果年龄是奇数,则加3,如果是偶数,则加2,然后作为字符串返回。 有了这个代码我得到了 不兼容的类型:无法将int转换为字符串 九号线不是已经换了吗?

  • 问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转

  • 问题内容: 如何从float转换为string或从string转换为float? 在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算出的浮点值之间进行断言。 我尝试从浮动到字符串: 但是断言失败 问题答案: 使用Java的类。 为了进行比较,将字符串转换为float并比较两个float总是更好。这是因为对于一个浮点数,存在多个字符串表示形式,与字符串相比,它们是不同的(例如“ 25”!

  • 问题内容: 怎么转换成?如果应该这样做 那怎么算呢? 以及如何转换为? 问题答案: 缓冲区长度为frameCapacity * bytesPerFrame。以下是可以在NSData和AVAudioPCMBuffer之间进行转换的函数。

  • 问题内容: 我正在尝试将转换为,而我的代码如下: 控制台会打印如下内容: 的是,我不知道这里有什么问题。 之后,我尝试像这样进行排序: 和控制台打印: 一切正常。 那么,有人可以告诉我我的第一个案例有什么问题吗? 问题答案: 正如Martin R所建议的,我看到了这篇文章,并将那个Objective- C代码转换为swift并且得到了以下代码: 并且这正常工作。 对于Swift 3.0:

  • 我目前正在使用平铺地图为pyplay中的一个游戏开发地图编辑器。关卡由以下结构中的块构建而成(尽管要大得多): 其中“1”是一块墙,“0”是一块空空气。 以下代码基本上是处理块类型更改的代码: