"集算器能提供 AES 加密函数吗,在调用其它服务器的 http 服务时,一般都需要 AES 加密。没这函数还挺不方便。"
集算器能提供 AES 加密函数吗,在调用其它服务器的 http 服务时,一般都需要 AES 加密。没这函数还挺不方便。
调用 http 服务读出返回串后先用 Base64 解析出字节数组,再用 AES 解密,是这个过程吗?AES 解密时 iv 和 key 从哪来?
加密解密都有可能用,我现在是 post 调用对方 http 服务,参数需要加密,加密参数一般双方会约定好,是双方都知道的固定值。
比如这个加密参数,双方会约定好。
咨询使用过程,是要问这和 SPL 有什么关系?SPL 如果提供加解密方法,会在哪里出现?
比如,对方有个接口 =httpfile(“http://www.test.com/query”,“user=sjr&data=”/arg_data)我在调用这个接口的时候需加密后数据放在 arg_data 中,对方解密后再返回数据。有的接口也要求 json 中部分数据加密,这种加密与解密也是为了提高数据安全性。
服务器端也是用 SPL 自己做吗?加解密是标准化的,但只能字节对字节。转成可显示串时(HTTP 需要),没有世界标准的搞法,要保证前后端一致,就是两边商量过后自己写的。
目前 SPL 没有加解密的方法,需要设计规划一下,如果急用可以自己写一个外部函数来 invoke
Cipher ci = Cipher.getInstance(“AES/CBC/PKCS5Padding”);//System.out.println(ci.getBlockSize()); //16bytebyte[] ivBytes = “abcdefghijkl+-$/”.getBytes(“utf-8”);byte[] ivBytes2 = “zbcdefghijkl+-$=”.getBytes(“utf-8”);IvParameterSpec iv = new IvParameterSpec(ivBytes),iv2 = new IvParameterSpec(ivBytes2);byte[] keyBytes = “0123456789abcdef”.getBytes(“utf-8”);Key key = new SecretKeySpec(keyBytes,“AES”);System.out.println(ci.getIV()); //nullci.init(Cipher.ENCRYPT_MODE, key, iv);System.out.println(ci.getIV());byte[] input = “012345678901234567890123456789”.getBytes(“utf-8”);byte[] output = ci.doFinal(input);ci.init(Cipher.DECRYPT_MODE, key, iv); // 用 iv2 解密不正确byte[] input2 = ci.doFinal(output);System.out.println(Arrays.equals(input, input2));你这里如何确保 2 边的初始化向量 IV 是一致的?是 2 边都写死了同样的 IV?
IV 偏移量,填充什么的都是写死的,双方约定好的。这种加解密确实前端用的多些。但服务端也是需要的,比如目前场景是,批量开发票,定时任务直接执行。服务端直接调用的开票接口,需要加密传输。
调用 http 服务读出返回串后先用 Base64 解析出字节数组,再用 AES 解密,是这个过程吗?AES 解密时 iv 和 key 从哪来?
加密解密都有可能用,我现在是 post 调用对方 http 服务,参数需要加密,加密参数一般双方会约定好,是双方都知道的固定值。
比如这个加密参数,双方会约定好。
咨询使用过程,是要问这和 SPL 有什么关系?SPL 如果提供加解密方法,会在哪里出现?
比如,对方有个接口 =httpfile(“http://www.test.com/query”,“user=sjr&data=”/arg_data)
我在调用这个接口的时候需加密后数据放在 arg_data 中,对方解密后再返回数据。有的接口也要求 json 中部分数据加密,
这种加密与解密也是为了提高数据安全性。
服务器端也是用 SPL 自己做吗?加解密是标准化的,但只能字节对字节。转成可显示串时(HTTP 需要),没有世界标准的搞法,要保证前后端一致,就是两边商量过后自己写的。
目前 SPL 没有加解密的方法,需要设计规划一下,如果急用可以自己写一个外部函数来 invoke
Cipher ci = Cipher.getInstance(“AES/CBC/PKCS5Padding”);
//System.out.println(ci.getBlockSize()); //16byte
byte[] ivBytes = “abcdefghijkl+-$/”.getBytes(“utf-8”);
byte[] ivBytes2 = “zbcdefghijkl+-$=”.getBytes(“utf-8”);
IvParameterSpec iv = new IvParameterSpec(ivBytes),
iv2 = new IvParameterSpec(ivBytes2);
byte[] keyBytes = “0123456789abcdef”.getBytes(“utf-8”);
Key key = new SecretKeySpec(keyBytes,“AES”);
System.out.println(ci.getIV()); //null
ci.init(Cipher.ENCRYPT_MODE, key, iv);
System.out.println(ci.getIV());
byte[] input = “012345678901234567890123456789”.getBytes(“utf-8”);
byte[] output = ci.doFinal(input);
ci.init(Cipher.DECRYPT_MODE, key, iv); // 用 iv2 解密不正确
byte[] input2 = ci.doFinal(output);
System.out.println(Arrays.equals(input, input2));
你这里如何确保 2 边的初始化向量 IV 是一致的?是 2 边都写死了同样的 IV?
IV 偏移量,填充什么的都是写死的,双方约定好的。这种加解密确实前端用的多些。但服务端也是需要的,比如目前场景是,批量开发票,定时任务直接执行。服务端直接调用的开票接口,需要加密传输。