java - 在Android/Java平台上加密共享 key

标签 java android encryption aes

我对 Android 平台和加密都很陌生,所以请耐心等待。我需要调用一个 Web 服务,该服务要求我在调用之前对参数进行加密。我收到了一份规范,内容如下:

“我们使用 AES 进行加密。加密设置如下:

  • key :PublicKey12345678910

  • 位数:128

  • 填充:PKCS #7

  • 密码:密码 block 链接 (CBC)”

现在,我的问题可能是对加密过程缺乏基本的了解。我有我的公钥,但我该怎么用它呢?我试图在网上找到答案,但我所有的努力似乎都导致错误的加密 key ,或者经常导致“InvalidKeyLengthException, key 不是 128、196 或 256 位”(或大致方向上的某些内容)。我最近的努力很大程度上借鉴了堆栈上的答案,如下所示:

            String input = "TheParameterIWantToEncrypt";
        String secretID = "PublicKey12345678910";
        char[] inputChars = input.toCharArray();
        char[] pswChars = secretID.toCharArray();

        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5AndDES", new BouncyCastleProvider());
        KeySpec spec = new PBEKeySpec(pswChars);
        SecretKey tmp = factory.generateSecret(spec);
        SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secret);
        AlgorithmParameters params = cipher.getParameters();
        byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
        byte[] ciphertext = cipher.doFinal(input.getBytes());

        System.out.println(new String(ciphertext));

有人可以向我解释一下按照提供的规范中的顺序执行操作吗?此外,任何在 Java/Android 平台上实现此行为的代码也将非常感激。

最佳答案

暂时忘记实现细节,让我们专注于更高层次的事情。如果您以这种方式执行加密,您的私钥将以很容易提取的方式存储在程序中或程序使用的数据中的某个位置,从而损害加密。

相比之下,如果您使用 HTTPS(这是创建加密 session 的非常标准的方法),则会有一个经过充分测试和充分研究的过程,其中使用非对称密码来建立私钥,然后使用私钥创建加密 channel (通常使用128位AES加密)。

您确实应该阻止向您提供此 Web 服务的任何人,通过标准 HTTPS 连接提供该服务以进行加密,而不是依赖于像这样加密各个字段。

关于java - 在Android/Java平台上加密共享 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569672/

相关文章:

Java Web 启动 : unsigned cglib

java - 从数据库中检索 ZIP - 如何使用索引对其进行优化

Android studio 将 hprof 文件转储到项目文件夹中

android - FileObserver 不对更改使用react

configuration - 如何加密配置文件、grails [和 java] 中的密码

java - SAXParser 给出意想不到的随机结果

java - EditText 没有值

android - 从服务开始一个 Activity 到前台

python - 使用循环密码加密消息

java - 单一职责原则和服务/存储库设计