Java 这是对称密钥的正常格式/大小吗?

Java 这是对称密钥的正常格式/大小吗?,java,android,android-studio,aes,Java,Android,Android Studio,Aes,此函数创建对称和非对称密钥,然后生成包含公共密钥和对称密钥以及一些其他数据的二维码: private void initQRCode() { String qrString = ""; try { Random r = new Random(); KeyPairGenerator keyPairGenerator = KeyPai

此函数创建对称和非对称密钥,然后生成包含公共密钥和对称密钥以及一些其他数据的二维码:

      private void initQRCode() {
            String qrString = "";
                try {
                    Random r = new Random();
                    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
                    keyPairGenerator.initialize(256, new SecureRandom());
                    KeyPair keyPair = keyPairGenerator.generateKeyPair();

                    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
                    keyGenerator.init(256); // for example
                    SecretKey secretKey = keyGenerator.generateKey();


                    byte [] pubBytes = keyPair.getPublic().getEncoded();
                    byte [] symBytes = secretKey.getEncoded();
                    String publicKey = android.util.Base64.encodeToString(pubBytes,0);
                    String symKey = android.util.Base64.encodeToString(symBytes,0);

                    long groupID =  r.nextLong();
                    int tutorID = r. nextInt();

                    System.out.println(publicKey);
                    System.out.println(symKey);
                    System.out.println(groupID);
                    System.out.println(tutorID);

                    qrString = publicKey + ":::" + symKey  + ":::" + groupID + ":::" + tutorID;

                }catch(NoSuchAlgorithmException e){
                    e.printStackTrace();
                }
               if(qrString != "") {
                   StringBuilder textToSend = new StringBuilder();
                   textToSend.append(qrString);
                   MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
                   try {
                       BitMatrix bitMatrix = multiFormatWriter.encode(textToSend.toString(), BarcodeFormat.QR_CODE, 600, 600);
                       BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
                       Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
                       imageView.setImageBitmap(bitmap);
                       imageView.setVisibility(View.VISIBLE);

                   } catch (WriterException e) {
                       e.printStackTrace();
                   }
               }
        }
最终二维码结果: MDWWDQYJKOZHIVCNAQEBQADKWAWKAIHAK6SAELQTFFEGACUXH9GKMMQFXLVSCK1s4AEYMH9AST 阿格姆巴埃= ::/3aktO5322KlHLTwVY490S6/rpXW1z0Ga30+HKNI64E=
::2629194659936505759:::1529276565

您的AES密钥长度为256位或32字节,这是AES对称加密的最大密钥长度。生成256位密钥长度的RSA密钥对肯定太短了——今天的最小值应该是2048位。由于钥匙有“正常”编码,我无法回答您的问题。Base64主要用于密钥需要打印或通过邮件等方式传输时。使用二维码需要另一方的读卡器知道二维码“内部”有哪些数据,因此不需要Base64编码。AES密钥的长度为256位或32字节,这是AES对称加密的最大密钥长度。生成256位密钥长度的RSA密钥对肯定太短了——今天的最小值应该是2048位。由于钥匙有“正常”编码,我无法回答您的问题。Base64主要用于密钥需要打印或通过邮件等方式传输时。使用QR码需要另一方的阅读器知道QR码“内部”有哪些数据,因此不需要Base64编码。