关于Android端与JavaWeb传输加密,以下是详细解答:
1、对称式加密DES
定义:对称式加密即使用单钥密码加密的方法,信息的加密和解密使用同一个秘钥。
常用算法:常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等。
特点:对称加密算法的特点是效率高,但安全性较低,因为同一个密钥用于通信双方,一旦密钥泄露,数据就可能面临风险。
2、非对称加密RSA
定义:非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey),公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
特点:因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
RSA算法:RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的,RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
3、RSA密钥生成
私钥生成:私钥生成命令为genrsa -out rsa_private_key.pem 1024
,openssl随机生成了一份私钥,加密长度是1024位。
公钥生成:公钥生成命令为rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
。
4、Android端配置
网络框架:由于本项目网络框架采用Retrofit+OkHttp的实现方式,所以对参数进行加密的过程由OkHttp拦截器来实现。
拦截器实现:拦截器实现代码如下:
public class EncryptionInterceptor implements Interceptor { private Context mContext; public EncryptionInterceptor(Context context) { this.mContext = context; } @Override public Response intercept(@NonNull Chain chain) throws IOException { Request request = chain.request(); RequestBody oldBody = request.body(); Buffer buffer = new Buffer(); if (oldBody != null) { oldBody.writeTo(buffer); } String strOldBody = buffer.readUtf8(); Map<String, String> map = new HashMap<>(); String dataByte = URLDecoder.decode(strOldBody.substring(5), "utf-8"); try { //获取DES的key byte[] desKey = DESCoder.initKey(); //DES加密数据 byte[] encrypt = DESCoder.encrypt(dataByte.getBytes(), desKey); map.put("data", parseByte2HexStr(encrypt)); //RSA加密 RSAEncrypt rsaEncrypt = new RSAEncrypt(); InputStream inputStream = mContext.getResources().getAssets().open("rsa_public_key.pem"); //rsa设置公钥 rsaEncrypt.loadPublicKey(inputStream); //rsa加密DES的key byte[] rsaData = rsaEncrypt.encrypt(rsaEncrypt.getPublicKey(), desKey); map.put("sign", parseByte2HexStr(rsaData)); } catch (Exception e) { e.printStackTrace(); } FormBody body = new FormBody.Builder().add("data", map.get("data")).add("sign", map.get("sign")).build(); request = request.newBuilder().header("Content-Type", body.contentType()).header("Content-Length", String.valueOf(body.contentLength())).method(request.method(), body).build(); return chain.proceed(request); } }
parseByte2HexStr方法用于将二进制转换成16进制字符串。
相关问题与解答:
Q1: 如何生成RSA密钥?
A1: RSA密钥的生成可以通过OpenSSL协议进行,具体步骤包括安装OpenSSL软件包、启动OpenSSL工作空间,然后执行命令genrsa -out rsa_private_key.pem 1024
生成私钥,再执行命令rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
生成公钥。
Q2: Android端如何配置数据传输的加密过程?
A2: Android端可以通过OkHttp拦截器来实现数据传输的加密过程,可以创建一个继承自Interceptor的拦截器类,并在其intercept方法中实现数据的加密逻辑,可以先使用DES算法对数据进行加密,然后再使用RSA算法对DES的密钥进行加密,最后将加密后的数据和密钥一起发送给服务器。
以上就是关于“Android端与JavaWeb传输加密”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/638824.html