首页 > 解决方案 > 如何使用我的密钥使用 javax.crypto.Cipher 进行加密?

问题描述

我需要一个简单的解决方案(我是新手)。它包括获取某个 16 HEX 密钥并用它加密另一个 16 HEX 密钥。该算法需要 128 个 AES/ECB/NoPadding。正是以这种格式感知MiBand 2健身手环的设备授权参数。但是我设法通过使用“javax.crypto.spec.SecretKeySpec”创建密钥来找到所有解决方案。我尝试以字节的形式向 cipher.init 发送密钥,但被告知“参数不匹配;字节 [] 无法转换为 java.security.Key”,其他格式也报错。我怎样才能找到解决方案?

package com.company;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class Main
{ public static void main(String[] argv) {
        String value = "9CC07199FECA0313403475ED62FEC727";
        System.out.println("encriptVal = " + encrypt(value) );
                                           }


    public static String encrypt(String value) {
        try {
            SecretKeySpec sks = new SecretKeySpec(hexStringToByteArray("30313233343536373839404142434445"), "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, sks, cipher.getParameters());
            byte[] encrypted = cipher.doFinal(value.getBytes());
            return byteArrayToHexString(encrypted);
            }

        catch (Exception e) {
            throw new RuntimeException(e);
                            }
                                               }

    private static byte[] hexStringToByteArray(String syc) {
        byte[] b = new byte[syc.length() / 2];
        for (int i = 0; i < b.length; i++) {
            int index = i * 2;
            int v = Integer.parseInt(syc.substring(index, index + 2), 16);
            b[i] = (byte) v;
                                           }
        return b;
                                                         }


    private static String byteArrayToHexString(byte[] b) {
        StringBuilder sb = new StringBuilder(b.length * 2);
        for (int i = 0; i < b.length; i++) {
            int v = b[i] & 0xff;
            if (v < 16) {
                sb.append('0');
            }
            sb.append(Integer.toHexString(v));
                                           }
        return sb.toString().toUpperCase();
                                                         }


}

标签: javaencryptionaes

解决方案


推荐阅读