gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:48:44 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com