RSA加密长文本

master
hwf452 2 years ago
parent b54b648d24
commit 5936035346

@ -147,8 +147,8 @@ public class LoginActivity extends BaseActivity {
});
//initNFC();
// etUse.setText("181145");
// etPwd.setText("13902576510");
etUse.setText("181145");
etPwd.setText("13902576510");
}
@ -254,11 +254,17 @@ public class LoginActivity extends BaseActivity {
@Override
public void onSucceed(int what, Response<String> response) throws ParseException {
String json = response.get();
Log.i("app", "login-----");
Log.i("app", json);
// Log.i("app", "login-----");
// Log.i("app", json);
UserInfo userInfo = GsonUtils.GsonToBean(json, UserInfo.class);
String jsonDecode = RSAUtils.decryptBASE64StrByPublic(json);
if(TextUtils.isEmpty(jsonDecode)){
//showToast(UiUtlis.getString(context, R.string.login_no_connect_to_server));
showToast("登录异常...");
}else{
UserInfo userInfo = GsonUtils.GsonToBean(jsonDecode, UserInfo.class);
//Log.i("app",new Gson().toJson(userInfo));
//Log.i("app", jsonDecode);
if (userInfo != null) {
UserInfo.User user = userInfo.getRows().get(0);
String status = user.getStatus();
@ -318,9 +324,11 @@ public class LoginActivity extends BaseActivity {
showToast(UiUtlis.getString(context, R.string.login_no_connect_to_server));
}
}
}
@Override
public void onFailed(int what, Response<String> response) {
showToast(UiUtlis.getString(context, R.string.login_no_connect_to_server));
}
};
@ -343,16 +351,17 @@ public class LoginActivity extends BaseActivity {
userInfo.setSysversion(sysVersion);
userInfo.setPhonemodel(model);
userInfo.setPhonenum("");
// userInfo.setUsername(UiUtlis.getText(etUse));
// userInfo.setPassword(UiUtlis.getText(etPwd));
userInfo.setUsername(UiUtlis.getText(etUse));
userInfo.setPassword(UiUtlis.getText(etPwd));
//公钥加密处理
userInfo.setUsername(RSAUtils.encryptBASE64Str(UiUtlis.getText(etUse)));
userInfo.setPassword(RSAUtils.encryptBASE64Str(UiUtlis.getText(etPwd)));
// userInfo.setUsername(RSAUtils.encryptBASE64Str(UiUtlis.getText(etUse)));
// userInfo.setPassword(RSAUtils.encryptBASE64Str(UiUtlis.getText(etPwd)));
list.add(userInfo);
info.setRows(list);
String json = GsonUtils.GsonString(info);
Log.i("app", json);
return json;
//Log.i("app", json);
//Log.i("app",RSAUtils.encryptBASE64Str(json));
return RSAUtils.encryptBASE64Str(json)+"1";
}
public String getNfcInfo(String nfcId) {

@ -157,8 +157,8 @@ public class MainActivity extends BaseActivity3 {
checkUpdateApk();
List<String> permissionsResult = this.getPermissionsResult();
// Log.i("app", "---------");
// Log.i("app", new Gson().toJson(permissionsResult));
Log.i("app", "---------");
Log.i("app", new Gson().toJson(permissionsResult));
boolean isApp_YXXJ = false;
boolean isApp_RLXJ = false;
for (String permissions : permissionsResult) {
@ -222,9 +222,6 @@ public class MainActivity extends BaseActivity3 {
return;
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
flashUtil.toggle(MainActivity.this);
} else {
//动态权限申请
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
//权限请求
@ -240,7 +237,6 @@ public class MainActivity extends BaseActivity3 {
// flashUtil.toggle(MainActivity.this);
// }
}
}
@Override

@ -6,12 +6,13 @@ public class Contans {
public static String LOGIN = "AppLogin.ashx";
public static String LOGINNFC = "AppLogin/userLogin.ashx";
//内网正式环境
//public static String IP = "http://10.20.1.100:8110/";
//public static String IP = "http://10.20.1.100:8500/app/";
public static String IP = "http://192.168.2.90:28500/";
public static String IP = "http://192.168.2.90:28500/app/";
public static String network_type_Intranet = "http://192.168.2.90:28500/";
public static String network_type_extranet = "https://www.zjtsp.com/";
public static String network_type_Intranet = "http://192.168.2.90:28500/app/";
//public static String network_type_Intranet = "http://10.20.1.100:8500/app/";
public static String network_type_extranet = "https://www.zjtsp.com/app/";
public static String MAXIMOIP = "http://10.46.0.152:7001/";

@ -78,12 +78,13 @@ public class NohttpUtils {
*/
public <T> void add(Activity mActivity, int what, Request<T> request, HttpListener<T> callback, boolean canCanel, boolean isLoading, String msg) {
String tokenTemp = (String) SPUtils.get(mActivity, Contans.LOGIN_TOKEN, "");
Log.i("app", request.url());
if(!TextUtils.isEmpty(tokenTemp)){
String token = RSAUtils.decryptBASE64StrLocal(tokenTemp);;
String credential = "Bearer " + token;
request.addHeader("Authorization", credential);
//Log.i("app", request.url());
// Log.i("app", credential);
// Log.i("app", request.url());
Log.i("app", credential);
// Log.i("app",new Gson().toJson(request.headers()));
}
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, canCanel, isLoading, msg));
@ -92,12 +93,13 @@ public class NohttpUtils {
public <T> void add(Activity mActivity, int what, Request<T> request, HttpListener<T> callback) {
String tokenTemp = (String) SPUtils.get(mActivity, Contans.LOGIN_TOKEN, "");
Log.i("app", request.url());
if(!TextUtils.isEmpty(tokenTemp)){
String token = RSAUtils.decryptBASE64StrLocal(tokenTemp);;
String credential = "Bearer " + token;
request.addHeader("Authorization", credential);
//Log.i("app", request.url());
// Log.i("app", credential);
Log.i("app", credential);
// Log.i("app",new Gson().toJson(request.headers()));
}
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, true, true, "加载中..."));

@ -4,6 +4,7 @@ package com.bjzc.zjyxdxj.utils;
import android.util.Base64;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
@ -24,11 +25,20 @@ public class RSAUtils {
* RSA
*/
public static final String RSA = "RSA";
public static final String ECB_None_PKCS1_PADDING = "RSA/None/PKCS1Padding";//java默认加密填充方式 RSA/None/PKCS1Padding
private static final String PUBLIC_KEY = "RSAPublicKey";
private static final String PRIVATE_KEY = "RSAPrivateKey";
public static final int DEFAULT_KEY_SIZE = 2048;//秘钥默认长度
//RSA最大加密明文大小 1024位是117 算法 最大加密明文大小 = 1024(bit) / 8 - 11(byte) = 117 byte 最大加密明文大小 = 2048(bit) / 8 - 11(byte) = 245 byte
//private static final int MAX_ENCRYPT_BLOCK = 245;
private static final int MAX_ENCRYPT_BLOCK = (DEFAULT_KEY_SIZE / 8) - 11;
//RSA最大解密密文大小 1024位是128 2048位是 256 依此类推
//private static final int MAX_DECRYPT_BLOCK = 256;
private static final int MAX_DECRYPT_BLOCK = DEFAULT_KEY_SIZE / 8;
//java默认加密填充方式 RSA 对应安卓 RSA/None/PKCS1Padding
//public static final String ECB_None_PKCS1_PADDING = "RSA";
//安卓手机加密填充方式用 RSA/None/PKCS1Padding
public static final String ECB_None_PKCS1_PADDING = "RSA/None/PKCS1Padding";
public static final String public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhpRgDGj3dk8kaNnnQIJ6YjbaEDBYEzDkv3qR3a55odU4/fJ3LFtGQfHM7LzQ3bpYaC8cZiYAu0ByPENW0G7HzVmxPfKdbLZtrRe+9kH8Fm+M2B26/XZd9QfT9+F2NQtFq68UA6yV5Z4wvxDjp2ZEzVjd+6ODQHuxf5JzySyWtgg844sHdB47iSdC06PnDfjLGMp3AtYeCbQH1mNOjuV44vbiccoTP3gCLnm9BS9Ez4F0fM04kTnCLpOdphJub341gUUnuoFbo+CGrnM5NfwXnw1MUkl5H25BHwK4So/L9DwbBsktiFOuzC8L4DuWvJJSLZnKXIXmPGoRVqTe5zCMkQIDAQAB";
public static final String private_key = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCGlGAMaPd2TyRo2edAgnpiNtoQMFgTMOS/epHdrnmh1Tj98ncsW0ZB8czsvNDdulhoLxxmJgC7QHI8Q1bQbsfNWbE98p1stm2tF772QfwWb4zYHbr9dl31B9P34XY1C0WrrxQDrJXlnjC/EOOnZkTNWN37o4NAe7F/knPJLJa2CDzjiwd0HjuJJ0LTo+cN+MsYyncC1h4JtAfWY06O5Xji9uJxyhM/eAIueb0FL0TPgXR8zTiROcIuk52mEm5vfjWBRSe6gVuj4Iauczk1/BefDUxSSXkfbkEfArhKj8v0PBsGyS2IU67MLwvgO5a8klItmcpcheY8ahFWpN7nMIyRAgMBAAECggEAPkrplnTzrlh9subByrNacKGRGBM4gVGNYDAc2m6LMGRgp/MWRHrPL3D7+MyBJVC+4SKFU6bdic8P0WMeCQZuB1gv2Uu2oH5kj81A//2U8NGbcOF6Dx496VBBRiifLXhVPF2itvyouYsaZyYrKe4FhMNQpMyP0UYv56vjWkgATqsbFmx2K8FLSGwpBvYys57gy4Evtep0yLTel6E4mnkQVdfTXnA7zylMn5Xz6Mk8u6H6o+Zhfxugw8/+CS9cDSCNxX0ZN8xgqONNtrHpAsM+AWbHuim89HnoVq2RrkHVnjCTXd2IG2Hs+lO7t7GYk3bqLwlpaupmR4rnOI+R+Rf3TQKBgQDpnMAY9l5Ro+r+SR7UjN+tSMBBX3S764NTAE0kNUSB3iBQnuLY60ziqbEbAupSFBnbkshWIVGaKdN6szH9lpoMSEyEWrN/EYY46WxFC6MT4iqvtl3Trqu/7h0DrjWsSY9e8ja8Zpv0lb7B8IEUiydeTfdkA+oTu4igz8gRs+BpuwKBgQCTegnoVlf15fLx8Czeo54YouHnD5fxzx5svsvXIFarMcQ89UMcUw/gBh3QGvx4BS6DUctitzmAeTQkQVtjVQZ3gNTMwILcB4NWibHursnsWQB6BIcRbww9FSIpARXPbXS2FbqjN+3aS8REEVJrIOPP2PQ62SeQSnA/eZBy1DjIIwKBgD4prtg1nq18v8hAbsrCXba/mCENJIPozH4mo2BSKFOiZtjtHpH4MvJRk0YLxYxnuuW5rkN1BEDQhmytCE1haMaB6pKBjCfw4tV8D4pj6VYeJZuyHE96uEsPMntLPQ8GV/c83qHNcAxqWGNE+yQbTzOB7aWYgQ4VJescvzEuuzWHAoGAZiUQ16t2IQqzyn7flRUeW1H1xWQ3iXQ7TnaYGNh9LvW5Rb9aTDP7ut6Bp7IJS9fK74mnpSfi2+kXBEWAVrx9TigdO/ParytE/JtCcl793IWInvqj0p9niqcokd3+jTzyqWtDaelDBP+VYM/elfSh1UQfZOMjU/064bwBIId9DKECgYBYXBe6oU7QiMYxa3YwAi9CcY9HXX6HRF4MpzOsOQ8wer8uJi6ca2th+jssz4SMeYZHnb7Ae+aORD7X+LefVuQiolwigAeTFgDihveb6WgxkKMarbqO8Ww7+laoGQjHvMQMTSkzt6KyhzeNu3F7Ma5HZkfCqwPAHzTOunGWUosRvg==";
@ -51,7 +61,17 @@ public class RSAUtils {
public static String decryptBASE64Str(String encryptString) {
try {
byte[] decodeByte = decryptBASE64(encryptString);
return new String(decryptByPrivateKey(decodeByte, private_key));
return new String(decryptByPrivateKeyLongText(decodeByte, private_key));
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public static String decryptBASE64StrByPublic(String encryptString) {
try {
byte[] decodeByte = decryptBASE64(encryptString);
return new String(decryptByPublicKeyLongText(decodeByte, public_key));
} catch (Exception e) {
e.printStackTrace();
}
@ -61,7 +81,7 @@ public class RSAUtils {
public static String decryptBASE64StrLocal(String encryptString) {
try {
byte[] decodeByte = decryptBASE64(encryptString);
return new String(decryptByPrivateKey(decodeByte, private_key_local));
return new String(decryptByPrivateKeyLongText(decodeByte, private_key_local));
} catch (Exception e) {
e.printStackTrace();
}
@ -71,7 +91,7 @@ public class RSAUtils {
public static String decryptBASE64StrMqtt(String encryptString) {
try {
byte[] decodeByte = decryptBASE64(encryptString);
return new String(decryptByPrivateKey(decodeByte, private_key_mqtt));
return new String(decryptByPrivateKeyLongText(decodeByte, private_key_mqtt));
} catch (Exception e) {
e.printStackTrace();
}
@ -80,7 +100,7 @@ public class RSAUtils {
public static String encryptBASE64Str(String text) {
try {
return encryptBASE64(encryptByPublicKey(text.getBytes(), public_key));
return encryptBASE64(encryptByPublicKeyLongText(text.getBytes(), public_key));
} catch (Exception e) {
e.printStackTrace();
}
@ -89,7 +109,7 @@ public class RSAUtils {
public static String encryptBASE64StrLocal(String text) {
try {
return encryptBASE64(encryptByPublicKey(text.getBytes(), public_key_local));
return encryptBASE64(encryptByPublicKeyLongText(text.getBytes(), public_key_local));
} catch (Exception e) {
e.printStackTrace();
}
@ -98,7 +118,7 @@ public class RSAUtils {
public static String encryptBASE64StrMqtt(String text) {
try {
return encryptBASE64(encryptByPublicKey(text.getBytes(), public_key_mqtt));
return encryptBASE64(encryptByPublicKeyLongText(text.getBytes(), public_key_mqtt));
} catch (Exception e) {
e.printStackTrace();
}
@ -128,6 +148,44 @@ public class RSAUtils {
return cipher.doFinal(data);
}
/**
*
* @param encryptedData
* @param privateKey
* @return
* @throws Exception
*/
public static byte[] decryptByPrivateKeyLongText(byte[] encryptedData, String privateKey) throws Exception {
byte[] keyBytes = decryptBASE64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance(ECB_None_PKCS1_PADDING);
cipher.init(Cipher.DECRYPT_MODE, privateK);
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
byte[] decryptedData = out.toByteArray();
out.close();
return decryptedData;
}
/**
* <br>
*
@ -137,8 +195,7 @@ public class RSAUtils {
* @return
* @throws Exception
*/
public static byte[] decryptByPublicKey(byte[] data, String key)
throws Exception {
public static byte[] decryptByPublicKey(byte[] data, String key) throws Exception {
// 对密钥解密
byte[] keyBytes = decryptBASE64(key);
// 取得公钥
@ -151,6 +208,68 @@ public class RSAUtils {
return cipher.doFinal(data);
}
/**
*
* @param encryptedData
* @param publicKey
* @return
* @throws Exception
*/
public static byte[] decryptByPublicKeyLongText(byte[] encryptedData, String publicKey) throws Exception {
byte[] keyBytes = decryptBASE64(publicKey);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
Key publicK = keyFactory.generatePublic(x509KeySpec);
Cipher cipher = Cipher.getInstance(ECB_None_PKCS1_PADDING);
cipher.init(Cipher.DECRYPT_MODE, publicK);
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
byte[] decryptedData = out.toByteArray();
out.close();
return decryptedData;
}
/**
* <br>
*
@ -160,8 +279,7 @@ public class RSAUtils {
* @return
* @throws Exception
*/
public static byte[] encryptByPublicKey(byte[] data, String key)
throws Exception {
public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception {
// 对公钥解密
byte[] keyBytes = decryptBASE64(key);
// 取得公钥
@ -174,6 +292,69 @@ public class RSAUtils {
return cipher.doFinal(data);
}
/**
*
* @param data
* @param publicKey
* @return
* @throws Exception
*/
public static byte[] encryptByPublicKeyLongText(byte[] data, String publicKey) throws Exception {
byte[] keyBytes = decryptBASE64(publicKey);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
Key publicK = keyFactory.generatePublic(x509KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(ECB_None_PKCS1_PADDING);
cipher.init(Cipher.ENCRYPT_MODE, publicK);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
return encryptedData;
}
/**
* <br>
*
@ -183,8 +364,7 @@ public class RSAUtils {
* @return
* @throws Exception
*/
public static byte[] encryptByPrivateKey(byte[] data, String key)
throws Exception {
public static byte[] encryptByPrivateKey(byte[] data, String key) throws Exception {
// 对密钥解密
byte[] keyBytes = decryptBASE64(key);
// 取得私钥
@ -197,6 +377,67 @@ public class RSAUtils {
return cipher.doFinal(data);
}
/**
*
* @param data
* @param privateKey
* @return
* @throws Exception
*/
public static byte[] encryptByPrivateKeyLongText(byte[] data, String privateKey) throws Exception {
byte[] keyBytes = decryptBASE64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance(ECB_None_PKCS1_PADDING);
cipher.init(Cipher.ENCRYPT_MODE, privateK);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
return encryptedData;
}
/**
*
*
@ -233,7 +474,7 @@ public class RSAUtils {
public static Map<String, Object> initKey() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator
.getInstance(RSA);
keyPairGen.initialize(2048);
keyPairGen.initialize(DEFAULT_KEY_SIZE);
KeyPair keyPair = keyPairGen.generateKeyPair();
// 公钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

Loading…
Cancel
Save