I'm Android平台和加密都非常新的共享密钥,所以大家多多包涵。我需要调用一个web服务,它需要我在调用之前加密一个参数。我收到的规范内容如下:加密了Android/Java平台
“我们使用AES加密设置为加密如下:
重点:PublicKey12345678910
位数:128
Padding:PKCS#7
密码:密码块链接(CBC)“
现在,我的问题可能是缺少的加密过程的基本认识。我有我的公钥,但我该怎么处理它?我试图寻找答案在线,但我所有的努力似乎导致要么有错误的加密密钥或很经常的“InvalidKeyLengthException,关键不是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平台上实现这种行为的代码也将非常有用。
嗯,这确实让很多的意义上,这似乎有点凌乱。但是,更换网络服务不是一种选择,所以我必须处理我所得到的。尽管非常感谢您的意见,但在将来讨论web服务时,我会牢记这一点。 – karl
你不需要*替换它,但你需要修改它。但我并不认为这里有一个选择。你不可能在不损害它的情况下在客户端拥有私钥,而且如果你实现了自己的密钥交换,那么很容易出错。 –