pull/5/head
parent
71d38f1bc4
commit
ba27de7d3b
Binary file not shown.
@ -1,102 +0,0 @@ |
|||||||
package xyz.fycz.myreader.util; |
|
||||||
|
|
||||||
import java.security.MessageDigest; |
|
||||||
|
|
||||||
import javax.crypto.KeyGenerator; |
|
||||||
import javax.crypto.Mac; |
|
||||||
import javax.crypto.SecretKey; |
|
||||||
import javax.crypto.spec.SecretKeySpec; |
|
||||||
|
|
||||||
import Decoder.BASE64Decoder; |
|
||||||
import Decoder.BASE64Encoder; |
|
||||||
|
|
||||||
|
|
||||||
public abstract class Coder { |
|
||||||
public static final String KEY_SHA = "SHA"; |
|
||||||
public static final String KEY_MD5 = "MD5"; |
|
||||||
|
|
||||||
/** |
|
||||||
* MAC算法可选以下多种算法 |
|
||||||
* <pre> |
|
||||||
* HmacMD5 |
|
||||||
* HmacSHA1 |
|
||||||
* HmacSHA256 |
|
||||||
* HmacSHA384 |
|
||||||
* HmacSHA512 |
|
||||||
* </pre> |
|
||||||
*/ |
|
||||||
public static final String KEY_MAC = "HmacMD5"; |
|
||||||
|
|
||||||
/** |
|
||||||
* BASE64解密 |
|
||||||
* @param key |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] decryptBASE64( String key ) throws Exception { |
|
||||||
return (new BASE64Decoder()).decodeBuffer(key); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* BASE64加密 |
|
||||||
* @param key |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String encryptBASE64(byte[] key) throws Exception { |
|
||||||
return (new BASE64Encoder()).encodeBuffer(key); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* MD5 加密 |
|
||||||
* @param data |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] encryptMD5( byte[] data) throws Exception { |
|
||||||
MessageDigest md5 = MessageDigest.getInstance(KEY_MD5); |
|
||||||
md5.update(data); |
|
||||||
|
|
||||||
return md5.digest(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* SHA 加密 |
|
||||||
* @param data |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] encryptSHA( byte[] data) throws Exception { |
|
||||||
MessageDigest sha = MessageDigest.getInstance(KEY_SHA); |
|
||||||
sha.update(data); |
|
||||||
|
|
||||||
return sha.digest(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 初始化HMAC密钥 |
|
||||||
* |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String initMacKey() throws Exception { |
|
||||||
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC); |
|
||||||
|
|
||||||
SecretKey secretKey = keyGenerator.generateKey(); |
|
||||||
return encryptBASE64(secretKey.getEncoded()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* HMAC 加密 |
|
||||||
* @param data |
|
||||||
* @param key |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] encryptHMAC( byte[] data, String key) throws Exception { |
|
||||||
SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC); |
|
||||||
Mac mac = Mac.getInstance(secretKey.getAlgorithm()); |
|
||||||
mac.init(secretKey); |
|
||||||
return mac.doFinal(data); |
|
||||||
} |
|
||||||
} |
|
@ -1,496 +0,0 @@ |
|||||||
package xyz.fycz.myreader.util; |
|
||||||
|
|
||||||
import android.annotation.SuppressLint; |
|
||||||
import android.graphics.Bitmap; |
|
||||||
import android.util.Base64; |
|
||||||
import android.util.Log; |
|
||||||
|
|
||||||
import com.google.gson.Gson; |
|
||||||
import okhttp3.*; |
|
||||||
import xyz.fycz.myreader.R; |
|
||||||
import xyz.fycz.myreader.application.App; |
|
||||||
import xyz.fycz.myreader.webapi.callback.HttpCallback; |
|
||||||
import xyz.fycz.myreader.webapi.callback.JsonCallback; |
|
||||||
import xyz.fycz.myreader.webapi.callback.URLConnectionCallback; |
|
||||||
import xyz.fycz.myreader.common.APPCONST; |
|
||||||
import xyz.fycz.myreader.common.URLCONST; |
|
||||||
import xyz.fycz.myreader.entity.JsonModel; |
|
||||||
|
|
||||||
import java.io.*; |
|
||||||
import java.net.HttpURLConnection; |
|
||||||
import java.net.URL; |
|
||||||
import java.net.URLConnection; |
|
||||||
import java.security.SecureRandom; |
|
||||||
import java.security.cert.CertificateException; |
|
||||||
import java.security.cert.X509Certificate; |
|
||||||
import java.util.*; |
|
||||||
import java.util.concurrent.TimeUnit; |
|
||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection; |
|
||||||
import javax.net.ssl.SSLContext; |
|
||||||
import javax.net.ssl.SSLSocketFactory; |
|
||||||
import javax.net.ssl.TrustManager; |
|
||||||
import javax.net.ssl.X509TrustManager; |
|
||||||
|
|
||||||
import static java.lang.String.valueOf; |
|
||||||
|
|
||||||
|
|
||||||
public class HttpUtil { |
|
||||||
|
|
||||||
private static String sessionid; |
|
||||||
//最好只使用一个共享的OkHttpClient 实例,将所有的网络请求都通过这个实例处理。
|
|
||||||
//因为每个OkHttpClient 实例都有自己的连接池和线程池,重用这个实例能降低延时,减少内存消耗,而重复创建新实例则会浪费资源。
|
|
||||||
private static OkHttpClient mClient; |
|
||||||
|
|
||||||
public static SSLSocketFactory createSSLSocketFactory() { |
|
||||||
SSLSocketFactory ssfFactory = null; |
|
||||||
try { |
|
||||||
SSLContext sc = SSLContext.getInstance("TLS"); |
|
||||||
sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom()); |
|
||||||
ssfFactory = sc.getSocketFactory(); |
|
||||||
} catch (Exception e) { |
|
||||||
} |
|
||||||
|
|
||||||
return ssfFactory; |
|
||||||
} |
|
||||||
static class TrustAllCerts implements X509TrustManager { |
|
||||||
@Override |
|
||||||
public void checkClientTrusted(X509Certificate[] chain, String authType) {} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void checkServerTrusted(X509Certificate[] chain, String authType) {} |
|
||||||
|
|
||||||
@Override |
|
||||||
public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];} |
|
||||||
} |
|
||||||
|
|
||||||
public static X509TrustManager createTrustAllManager() { |
|
||||||
X509TrustManager tm = null; |
|
||||||
try { |
|
||||||
tm = new X509TrustManager() { |
|
||||||
@SuppressLint("TrustAllX509TrustManager") |
|
||||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { |
|
||||||
//do nothing,接受任意客户端证书
|
|
||||||
} |
|
||||||
|
|
||||||
@SuppressLint("TrustAllX509TrustManager") |
|
||||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { |
|
||||||
//do nothing,接受任意服务端证书
|
|
||||||
} |
|
||||||
|
|
||||||
public X509Certificate[] getAcceptedIssuers() { |
|
||||||
return new X509Certificate[0]; |
|
||||||
} |
|
||||||
}; |
|
||||||
} catch (Exception ignored) { |
|
||||||
} |
|
||||||
return tm; |
|
||||||
} |
|
||||||
|
|
||||||
private static Interceptor getHeaderInterceptor() { |
|
||||||
return chain -> { |
|
||||||
Request request = chain.request() |
|
||||||
.newBuilder() |
|
||||||
.addHeader("Keep-Alive", "300") |
|
||||||
.addHeader("Connection", "Keep-Alive") |
|
||||||
.addHeader("Cache-Control", "no-cache") |
|
||||||
.build(); |
|
||||||
return chain.proceed(request); |
|
||||||
}; |
|
||||||
} |
|
||||||
|
|
||||||
public static synchronized OkHttpClient getOkHttpClient() { |
|
||||||
if (mClient == null) { |
|
||||||
OkHttpClient.Builder builder = new OkHttpClient.Builder(); |
|
||||||
builder.connectTimeout(5, TimeUnit.SECONDS) |
|
||||||
.readTimeout(10, TimeUnit.SECONDS) |
|
||||||
.writeTimeout(10, TimeUnit.SECONDS) |
|
||||||
.sslSocketFactory(createSSLSocketFactory(), createTrustAllManager()) |
|
||||||
.hostnameVerifier((hostname, session) -> true) |
|
||||||
.protocols(Collections.singletonList(Protocol.HTTP_1_1)) |
|
||||||
.addInterceptor(getHeaderInterceptor()); |
|
||||||
mClient = builder |
|
||||||
.build(); |
|
||||||
} |
|
||||||
return mClient; |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 图片发送 |
|
||||||
* |
|
||||||
* @param address |
|
||||||
* @param callback |
|
||||||
*/ |
|
||||||
public static void sendBitmapGetRequest(final String address, final HttpCallback callback) { |
|
||||||
new Thread(new Runnable() { |
|
||||||
HttpURLConnection connection = null; |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
try { |
|
||||||
URL url = new URL(address); |
|
||||||
connection = (HttpURLConnection) url.openConnection(); |
|
||||||
connection.setRequestMethod("GET"); |
|
||||||
connection.setRequestProperty("Content-type", "application/octet-stream"); |
|
||||||
connection.setRequestProperty("Accept-Charset", "utf-8"); |
|
||||||
connection.setRequestProperty("contentType", "utf-8"); |
|
||||||
connection.setConnectTimeout(10000); |
|
||||||
connection.setReadTimeout(10000); |
|
||||||
connection.setDoInput(true); |
|
||||||
connection.setDoOutput(true); |
|
||||||
InputStream in = connection.getInputStream(); |
|
||||||
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { |
|
||||||
Log.e("Http", "网络错误异常!!!!"); |
|
||||||
} |
|
||||||
Log.d("Http", "connection success"); |
|
||||||
if (callback != null) { |
|
||||||
callback.onFinish(in); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
Log.e("Http", e.toString()); |
|
||||||
if (callback != null) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} finally { |
|
||||||
if (connection != null) { |
|
||||||
connection.disconnect(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
}).start(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* get请求 |
|
||||||
* |
|
||||||
* @param address |
|
||||||
* @param callback |
|
||||||
*/ |
|
||||||
public static void sendGetRequest(final String address, final HttpCallback callback) { |
|
||||||
new Thread(new Runnable() { |
|
||||||
HttpURLConnection connection = null; |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
try { |
|
||||||
URL url = new URL(address); |
|
||||||
connection = (HttpURLConnection) url.openConnection(); |
|
||||||
connection.setRequestMethod("GET"); |
|
||||||
connection.setRequestProperty("Content-type", "text/html"); |
|
||||||
connection.setRequestProperty("Accept-Charset", "utf-8"); |
|
||||||
connection.setRequestProperty("contentType", "utf-8"); |
|
||||||
connection.setConnectTimeout(60 * 1000); |
|
||||||
connection.setReadTimeout(60 * 1000); |
|
||||||
connection.setDoInput(true); |
|
||||||
connection.setDoOutput(true); |
|
||||||
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { |
|
||||||
Log.e("Http", "网络错误异常!!!!"); |
|
||||||
} |
|
||||||
InputStream in = connection.getInputStream(); |
|
||||||
Log.d("Http", "connection success"); |
|
||||||
if (callback != null) { |
|
||||||
callback.onFinish(in); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
Log.e("Http", e.toString()); |
|
||||||
if (callback != null) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} finally { |
|
||||||
if (connection != null) { |
|
||||||
connection.disconnect(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
}).start(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 网络通信测试请求 |
|
||||||
* |
|
||||||
* @param address |
|
||||||
* @param callback |
|
||||||
*/ |
|
||||||
public static void sendTestGetRequest(final String address, final HttpCallback callback) { |
|
||||||
new Thread(new Runnable() { |
|
||||||
HttpURLConnection connection = null; |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
try { |
|
||||||
URL url = new URL(address); |
|
||||||
connection = (HttpURLConnection) url.openConnection(); |
|
||||||
connection.setRequestMethod("GET"); |
|
||||||
connection.setRequestProperty("Content-type", "text/html"); |
|
||||||
connection.setRequestProperty("Accept-Charset", "utf-8"); |
|
||||||
connection.setRequestProperty("contentType", "utf-8"); |
|
||||||
connection.setConnectTimeout(3 * 1000); |
|
||||||
connection.setReadTimeout(3 * 1000); |
|
||||||
connection.setDoInput(true); |
|
||||||
connection.setDoOutput(true); |
|
||||||
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { |
|
||||||
Log.e("Http", "网络错误异常!!!!"); |
|
||||||
} |
|
||||||
InputStream in = connection.getInputStream(); |
|
||||||
Log.d("Http", "connection success"); |
|
||||||
if (callback != null) { |
|
||||||
callback.onFinish(in); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
Log.e("Http", e.toString()); |
|
||||||
if (callback != null) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} finally { |
|
||||||
if (connection != null) { |
|
||||||
connection.disconnect(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
}).start(); |
|
||||||
} |
|
||||||
|
|
||||||
public static void sendGetRequest_okHttp(final String address, boolean isRefresh, final HttpCallback callback) { |
|
||||||
App.getApplication().newThread(() -> { |
|
||||||
try { |
|
||||||
OkHttpClient client = getOkHttpClient(); |
|
||||||
Request.Builder requestBuilder = new Request.Builder() |
|
||||||
.addHeader("Accept", "*/*") |
|
||||||
.addHeader("Connection", "Keep-Alive") |
|
||||||
//.addHeader("Charsert", "utf-8")
|
|
||||||
.addHeader("Cache-Control", "no-cache") |
|
||||||
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"); |
|
||||||
if (address.contains("qidian.com")) { |
|
||||||
SharedPreUtils spu = SharedPreUtils.getInstance(); |
|
||||||
String cookie = spu.getString(App.getmContext().getString(R.string.qdCookie), ""); |
|
||||||
if (cookie.equals("")) { |
|
||||||
requestBuilder.addHeader("cookie", "_csrfToken=eXRDlZxmRDLvFAmdgzqvwWAASrxxp2WkVlH4ZM7e; newstatisticUUID=1595991935_2026387981"); |
|
||||||
} else { |
|
||||||
requestBuilder.addHeader("cookie", cookie); |
|
||||||
} |
|
||||||
} |
|
||||||
requestBuilder.url(address); |
|
||||||
Response response = client.newCall(requestBuilder.build()).execute(); |
|
||||||
callback.onFinish(response.body().byteStream()); |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* post请求 |
|
||||||
* |
|
||||||
* @param address |
|
||||||
* @param output |
|
||||||
* @param callback |
|
||||||
*/ |
|
||||||
public static void sendPostRequest(final String address, final String output, final HttpCallback callback) { |
|
||||||
App.getApplication().newThread(new Runnable() { |
|
||||||
HttpURLConnection connection = null; |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
try { |
|
||||||
URL url = new URL(address); |
|
||||||
connection = (HttpURLConnection) url.openConnection(); |
|
||||||
connection.setRequestMethod("POST"); |
|
||||||
connection.setConnectTimeout(60 * 1000); |
|
||||||
connection.setReadTimeout(60 * 1000); |
|
||||||
connection.setRequestProperty("user-agent", |
|
||||||
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4168.3 Safari/537.36"); |
|
||||||
connection.setDoInput(true); |
|
||||||
connection.setDoOutput(true); |
|
||||||
if (output != null) { |
|
||||||
// 获取URLConnection对象对应的输出流
|
|
||||||
PrintWriter out = new PrintWriter(connection.getOutputStream()); |
|
||||||
// 发送请求参数
|
|
||||||
out.print(output); |
|
||||||
// flush输出流的缓冲
|
|
||||||
out.flush(); |
|
||||||
} |
|
||||||
InputStream in = connection.getInputStream(); |
|
||||||
if (callback != null) { |
|
||||||
callback.onFinish(in); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
if (callback != null) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} finally { |
|
||||||
if (connection != null) { |
|
||||||
connection.disconnect(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* post请求 获取蓝奏云直链 |
|
||||||
* |
|
||||||
* @param address |
|
||||||
* @param output |
|
||||||
* @param callback |
|
||||||
*/ |
|
||||||
public static void sendPostRequest(final String address, final String output, final HttpCallback callback, final String referer) { |
|
||||||
new Thread(new Runnable() { |
|
||||||
HttpURLConnection connection = null; |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
try { |
|
||||||
URL url = new URL(address); |
|
||||||
connection = (HttpURLConnection) url.openConnection(); |
|
||||||
connection.setRequestMethod("POST"); |
|
||||||
connection.setConnectTimeout(60 * 1000); |
|
||||||
connection.setReadTimeout(60 * 1000); |
|
||||||
connection.setRequestProperty("Referer", referer); |
|
||||||
connection.setRequestProperty("user-agent", |
|
||||||
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4168.3 Safari/537.36"); |
|
||||||
connection.setDoInput(true); |
|
||||||
connection.setDoOutput(true); |
|
||||||
if (output != null) { |
|
||||||
DataOutputStream out = new DataOutputStream(connection.getOutputStream()); |
|
||||||
out.writeBytes(output); |
|
||||||
} |
|
||||||
InputStream in = connection.getInputStream(); |
|
||||||
if (callback != null) { |
|
||||||
callback.onFinish(in); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
if (callback != null) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} finally { |
|
||||||
if (connection != null) { |
|
||||||
connection.disconnect(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
}).start(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 生成URL |
|
||||||
* |
|
||||||
* @param p_url |
|
||||||
* @param params |
|
||||||
* @return |
|
||||||
*/ |
|
||||||
public static String makeURL(String p_url, Map<String, Object> params) { |
|
||||||
if (params == null) return p_url; |
|
||||||
StringBuilder url = new StringBuilder(p_url); |
|
||||||
Log.d("http", p_url); |
|
||||||
if (url.indexOf("?") < 0) |
|
||||||
url.append('?'); |
|
||||||
for (String name : params.keySet()) { |
|
||||||
Log.d("http", name + "=" + params.get(name)); |
|
||||||
url.append('&'); |
|
||||||
url.append(name); |
|
||||||
url.append('='); |
|
||||||
try { |
|
||||||
if (URLCONST.isRSA) { |
|
||||||
if (name.equals("token")) { |
|
||||||
url.append(valueOf(params.get(name))); |
|
||||||
} else { |
|
||||||
url.append(StringHelper.encode(Base64.encodeToString(RSAUtilV2.encryptByPublicKey(valueOf(params.get(name)).getBytes(), APPCONST.publicKey), Base64.DEFAULT).replace("\n", ""))); |
|
||||||
} |
|
||||||
} else { |
|
||||||
url.append(valueOf(params.get(name))); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
//不做URLEncoder处理
|
|
||||||
// try {
|
|
||||||
// url.append(URLEncoder.encode(String.valueOf(params.get(name)), UTF_8));
|
|
||||||
// } catch (UnsupportedEncodingException e) {
|
|
||||||
// // TODO Auto-generated catch block
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
} |
|
||||||
return url.toString().replace("?&", "?"); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 生成post输出参数串 |
|
||||||
* |
|
||||||
* @param params |
|
||||||
* @return |
|
||||||
*/ |
|
||||||
public static String makePostOutput(Map<String, Object> params) { |
|
||||||
StringBuilder output = new StringBuilder(); |
|
||||||
Iterator<String> it = params.keySet().iterator(); |
|
||||||
while (true) { |
|
||||||
String name = it.next(); |
|
||||||
Log.d("http", name + "=" + params.get(name)); |
|
||||||
output.append(name); |
|
||||||
output.append('='); |
|
||||||
try { |
|
||||||
if (URLCONST.isRSA) { |
|
||||||
if (name.equals("token")) { |
|
||||||
output.append(valueOf(params.get(name))); |
|
||||||
} else { |
|
||||||
output.append(StringHelper.encode(Base64.encodeToString(RSAUtilV2.encryptByPublicKey(valueOf(params.get(name)).getBytes(), APPCONST.publicKey), Base64.DEFAULT).replace("\n", ""))); |
|
||||||
} |
|
||||||
} else { |
|
||||||
output.append(valueOf(params.get(name))); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
if (!it.hasNext()) { |
|
||||||
break; |
|
||||||
} |
|
||||||
output.append('&'); |
|
||||||
//不做URLEncoder处理
|
|
||||||
// try {
|
|
||||||
// url.append(URLEncoder.encode(String.valueOf(params.get(name)), UTF_8));
|
|
||||||
// } catch (UnsupportedEncodingException e) {
|
|
||||||
// // TODO Auto-generated catch block
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
} |
|
||||||
return output.toString(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Trust every server - dont check for any certificate |
|
||||||
*/ |
|
||||||
public static void trustAllHosts() { |
|
||||||
final String TAG = "trustAllHosts"; |
|
||||||
// Create a trust manager that does not validate certificate chains
|
|
||||||
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { |
|
||||||
|
|
||||||
public java.security.cert.X509Certificate[] getAcceptedIssuers() { |
|
||||||
return new java.security.cert.X509Certificate[]{}; |
|
||||||
} |
|
||||||
|
|
||||||
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
|
||||||
Log.i(TAG, "checkClientTrusted"); |
|
||||||
} |
|
||||||
|
|
||||||
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
|
||||||
Log.i(TAG, "checkServerTrusted"); |
|
||||||
} |
|
||||||
}}; |
|
||||||
|
|
||||||
// Install the all-trusting trust manager
|
|
||||||
try { |
|
||||||
SSLContext sc = SSLContext.getInstance("TLS"); |
|
||||||
sc.init(null, trustAllCerts, new java.security.SecureRandom()); |
|
||||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,289 +0,0 @@ |
|||||||
package xyz.fycz.myreader.util; |
|
||||||
|
|
||||||
import android.util.Base64; |
|
||||||
|
|
||||||
import java.security.Key; |
|
||||||
import java.security.KeyFactory; |
|
||||||
import java.security.KeyPair; |
|
||||||
import java.security.KeyPairGenerator; |
|
||||||
import java.security.PrivateKey; |
|
||||||
import java.security.PublicKey; |
|
||||||
import java.security.Signature; |
|
||||||
import java.security.interfaces.RSAPrivateKey; |
|
||||||
import java.security.interfaces.RSAPublicKey; |
|
||||||
import java.security.spec.PKCS8EncodedKeySpec; |
|
||||||
import java.security.spec.X509EncodedKeySpec; |
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import javax.crypto.Cipher; |
|
||||||
|
|
||||||
/** |
|
||||||
* <br> *RSA安全编码组件 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract class RSACoder extends Coder { |
|
||||||
public static final String KEY_ALGORITHM = "RSA"; |
|
||||||
public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; |
|
||||||
|
|
||||||
private static final String PUBLIC_KEY = "RSAPublicKey"; |
|
||||||
private static final String PRIVATE_KEY = "RSAPrivatekey"; |
|
||||||
|
|
||||||
/** |
|
||||||
* 用私钥对信息生成数字签名 |
|
||||||
* @param data 加密数据 |
|
||||||
* @param privateKey 私钥 |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String sign(byte[] data, String privateKey) throws Exception { |
|
||||||
//解密由base64编码的私钥
|
|
||||||
byte[] keyBytes = decryptBASE64(privateKey); |
|
||||||
|
|
||||||
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes); |
|
||||||
|
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
|
|
||||||
//取私钥对象
|
|
||||||
PrivateKey pKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); |
|
||||||
|
|
||||||
//用私钥生成数字签名
|
|
||||||
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); |
|
||||||
signature.initSign(pKey); |
|
||||||
signature.update(data); |
|
||||||
|
|
||||||
return encryptBASE64(signature.sign()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 校验数字签名 |
|
||||||
* @param data 加密数据 |
|
||||||
* @param publicKey 公钥 |
|
||||||
* @param sign 数字签名 |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static boolean verify(byte[] data, String publicKey, String sign) throws Exception { |
|
||||||
|
|
||||||
//解密有base64编码的公钥
|
|
||||||
byte[] keyBytes = decryptBASE64(publicKey); |
|
||||||
|
|
||||||
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); |
|
||||||
|
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
|
|
||||||
//取公钥对象
|
|
||||||
PublicKey pKey = keyFactory.generatePublic(keySpec); |
|
||||||
|
|
||||||
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); |
|
||||||
signature.initVerify(pKey); |
|
||||||
signature.update(data); |
|
||||||
//验证签名是否正常
|
|
||||||
return signature.verify(decryptBASE64(sign)); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 解密 |
|
||||||
* 用私钥解密 |
|
||||||
* @param data 加密数据 |
|
||||||
* @param key |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] decryptPrivateKey(byte[] data, String key) throws Exception { |
|
||||||
byte[] keyBytes = decryptBASE64(key); |
|
||||||
|
|
||||||
//取得私钥
|
|
||||||
PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key pKey = factory.generatePrivate(encodedKeySpec); |
|
||||||
|
|
||||||
//对数据解密
|
|
||||||
Cipher cipher = Cipher.getInstance(factory.getAlgorithm()); |
|
||||||
cipher.init(Cipher.DECRYPT_MODE, pKey); |
|
||||||
|
|
||||||
return cipher.doFinal(data); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 用公钥解密 |
|
||||||
* @param data |
|
||||||
* @param key |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] decryptByPublicKey( byte[] data, String key) throws Exception { |
|
||||||
|
|
||||||
//解密
|
|
||||||
byte[] keyBytes = decryptBASE64(key); |
|
||||||
|
|
||||||
//取得公钥
|
|
||||||
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key pKey = keyFactory.generatePublic(keySpec); |
|
||||||
|
|
||||||
//对数据解密
|
|
||||||
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); |
|
||||||
cipher.init(Cipher.DECRYPT_MODE, pKey); |
|
||||||
|
|
||||||
return cipher.doFinal(data); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 用公钥加密 |
|
||||||
* @param data |
|
||||||
* @param key |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] encryptByPublicKey( byte[] data, String key) throws Exception { |
|
||||||
|
|
||||||
byte[] keyBytes = decryptBASE64(key); |
|
||||||
|
|
||||||
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key pKey = keyFactory.generatePublic(keySpec); |
|
||||||
|
|
||||||
|
|
||||||
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); |
|
||||||
cipher.init(Cipher.ENCRYPT_MODE, pKey); |
|
||||||
|
|
||||||
return cipher.doFinal(data); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 用私钥加密 |
|
||||||
* @param data |
|
||||||
* @param key |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] encryptByPrivateKey(byte[] data, String key) throws Exception { |
|
||||||
|
|
||||||
byte[] keyBytes = decryptBASE64(key); |
|
||||||
|
|
||||||
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key privateKey = keyFactory.generatePrivate(keySpec); |
|
||||||
|
|
||||||
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); |
|
||||||
cipher.init(Cipher.ENCRYPT_MODE, privateKey); |
|
||||||
|
|
||||||
return cipher.doFinal(data); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 取得私钥 |
|
||||||
* @param keyMap |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String getPrivateKey(Map<String, Object> keyMap) throws Exception { |
|
||||||
|
|
||||||
Key key = (Key) keyMap.get(PRIVATE_KEY); |
|
||||||
|
|
||||||
return encryptBASE64(key.getEncoded()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 取得公钥 |
|
||||||
* @param keyMap |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String getPublicKey(Map<String, Object> keyMap) throws Exception { |
|
||||||
|
|
||||||
Key key = (Key) keyMap.get(PUBLIC_KEY); |
|
||||||
|
|
||||||
return encryptBASE64(key.getEncoded()); |
|
||||||
} |
|
||||||
/** |
|
||||||
* 初始化密钥 |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static Map<String, Object> initKey() throws Exception { |
|
||||||
|
|
||||||
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM); |
|
||||||
keyPairGenerator.initialize(1024); |
|
||||||
|
|
||||||
KeyPair keyPair = keyPairGenerator.generateKeyPair(); |
|
||||||
//公钥
|
|
||||||
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); |
|
||||||
|
|
||||||
//私钥
|
|
||||||
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); |
|
||||||
|
|
||||||
Map<String, Object> keyMap = new HashMap<String, Object>(2); |
|
||||||
keyMap.put(PRIVATE_KEY, privateKey); |
|
||||||
keyMap.put(PUBLIC_KEY, publicKey); |
|
||||||
return keyMap; |
|
||||||
} |
|
||||||
|
|
||||||
public static void test() throws Exception |
|
||||||
{ |
|
||||||
Map<String , Object> keyMap = RSAUtilV2.genKeyPair(); |
|
||||||
|
|
||||||
String publicKey = RSAUtilV2.getPublicKey(keyMap).replace("\n",""); |
|
||||||
String privateKey = RSAUtilV2.getPrivateKey(keyMap).replace("\n",""); |
|
||||||
|
|
||||||
System.out.println("公钥:\n" + publicKey); |
|
||||||
System.out.println("私钥:\n" + privateKey); |
|
||||||
System.out.println("公钥加密——私钥解密"); |
|
||||||
String inputStr = "{\\\"mobilePhone\\\":\\\"18577113435\\\",\\\"officePhone\\\":\\\"\\\",\\\"email\\\":\\\"test1@dwb.gxi.gov.cn\\\",\\\"token\\\":\\\"d87a6879-f5d3-4327-a5a5-43ed3ec31c8d\\\",\\\"realNameSzm\\\":\\\"c\\\",\\\"realNamePy\\\":\\\"ceshi1\\\",\\\"userState\\\":\\\"1\\\",\\\"sex\\\":\\\"male\\\",\\\"duty\\\":\\\"\\\",\\\"emailPwd\\\":\\\"test1@123456\\\",\\\"jurisdiction\\\":{\\\"meeting\\\":true,\\\"file\\\":true,\\\"supervise\\\":true,\\\"notice\\\":true,\\\"calendar\\\":true,\\\"document\\\":false,\\\"im\\\":true,\\\"email\\\":true,\\\"contacts\\\":true,\\\"commission\\\":false,\\\"meetingCount\\\":true,\\\"interview\\\":true},\\\"userName\\\":\\\"test01\\\",\\\"realName\\\":\\\"测试1\\\",\\\"userKey\\\":\\\"会议报名\\\",\\\"password\\\":\\\"e10adc3949ba59abbe56e057f20f883e\\\",\\\"activitiSync\\\":1,\\\"status\\\":1,\\\"currentDepartId\\\":\\\"8a8afb90582942f501582944770d0028\\\",\\\"currentDepartName\\\":\\\"文电处\\\",\\\"id\\\":\\\"40287d81585174ba0158523e3db20010\\\"}"; |
|
||||||
byte[] data = inputStr.getBytes(); |
|
||||||
|
|
||||||
byte[] encodedData = RSAUtilV2.encryptByPublicKey(data, publicKey); |
|
||||||
|
|
||||||
String enconde = Base64.encodeToString(encodedData, Base64.DEFAULT); |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
byte[] decodedData = RSAUtilV2.decryptByPrivateKey(Base64.decode(enconde, Base64.DEFAULT), |
|
||||||
privateKey); |
|
||||||
|
|
||||||
String outputStr = new String(decodedData); |
|
||||||
System.out.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr); |
|
||||||
} |
|
||||||
|
|
||||||
public static void test2() throws Exception |
|
||||||
{ |
|
||||||
Map<String , Object> keyMap = RSACoder.initKey(); |
|
||||||
|
|
||||||
String publicKey = RSACoder.getPublicKey(keyMap); |
|
||||||
String privateKey = RSACoder.getPrivateKey(keyMap); |
|
||||||
|
|
||||||
System.out.println("公钥:\n" + publicKey); |
|
||||||
System.out.println("私钥:\n" + privateKey); |
|
||||||
|
|
||||||
System.err.println("私钥加密——公钥解密"); |
|
||||||
String inputStr = "sign"; |
|
||||||
byte[] data = inputStr.getBytes(); |
|
||||||
|
|
||||||
byte[] encodedData = RSACoder.encryptByPrivateKey(data, privateKey); |
|
||||||
|
|
||||||
byte[] decodedData = RSACoder |
|
||||||
.decryptByPublicKey(encodedData, publicKey); |
|
||||||
|
|
||||||
String outputStr = new String(decodedData); |
|
||||||
System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr); |
|
||||||
|
|
||||||
|
|
||||||
System.err.println("私钥签名——公钥验证签名"); |
|
||||||
// 产生签名
|
|
||||||
String sign = RSACoder.sign(encodedData, privateKey); |
|
||||||
System.err.println("签名:\r" + sign); |
|
||||||
|
|
||||||
// 验证签名
|
|
||||||
boolean status = RSACoder.verify(encodedData, publicKey, sign); |
|
||||||
System.err.println("状态:\r" + status); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/* public static void main(String[] args) throws Exception { |
|
||||||
|
|
||||||
|
|
||||||
//test2();
|
|
||||||
test(); |
|
||||||
}*/ |
|
||||||
} |
|
@ -1,478 +0,0 @@ |
|||||||
package xyz.fycz.myreader.util; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by zhao on 2017/1/20. |
|
||||||
*/ |
|
||||||
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream; |
|
||||||
import java.security.Key; |
|
||||||
import java.security.KeyFactory; |
|
||||||
import java.security.KeyPair; |
|
||||||
import java.security.KeyPairGenerator; |
|
||||||
import java.security.PrivateKey; |
|
||||||
import java.security.PublicKey; |
|
||||||
import java.security.Signature; |
|
||||||
import java.security.interfaces.RSAPrivateKey; |
|
||||||
import java.security.interfaces.RSAPublicKey; |
|
||||||
import java.security.spec.PKCS8EncodedKeySpec; |
|
||||||
import java.security.spec.X509EncodedKeySpec; |
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import javax.crypto.Cipher; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** */ |
|
||||||
|
|
||||||
/** |
|
||||||
* <p> |
|
||||||
* RSA公钥/私钥/签名工具包 v2 UPDATE BY ZYL |
|
||||||
* </p> |
|
||||||
* <p> |
|
||||||
* 罗纳德·李维斯特(Ron [R]ivest)、阿迪·萨莫尔(Adi [S]hamir)和伦纳德·阿德曼(Leonard [A]dleman) |
|
||||||
* </p> |
|
||||||
* <p> |
|
||||||
* 字符串格式的密钥在未在特殊说明情况下都为BASE64编码格式<br/> |
|
||||||
* 由于非对称加密速度极其缓慢,一般文件不使用它来加密而是使用对称加密,<br/> |
|
||||||
* 非对称加密算法可以用来对对称加密的密钥加密,这样保证密钥的安全也就保证了数据的安全 |
|
||||||
* </p> |
|
||||||
* <p> |
|
||||||
* 版本2更新变化: |
|
||||||
* 1原版本密钥创建后保存在内存map中,新版本密钥创建后保存为public.key,private.key的功能(base64解码后保存). |
|
||||||
* 2为保证生成文件的密钥内容可以显示并缩短加密后的长度,对需加密内容进行hex(16进制转换)处理后再加密. |
|
||||||
* 即 |
|
||||||
* </P> |
|
||||||
* |
|
||||||
* @author IceWee |
|
||||||
* @version 1.0 |
|
||||||
* @date 2012-4-26 |
|
||||||
*/ |
|
||||||
public class RSAUtilV2 extends Coder { |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* 加密算法RSA |
|
||||||
*/ |
|
||||||
public static final String KEY_ALGORITHM = "RSA"; |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* 签名算法 |
|
||||||
*/ |
|
||||||
public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* 获取公钥的key |
|
||||||
*/ |
|
||||||
private static final String PUBLIC_KEY = "RSAPublicKey"; |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* 获取私钥的key |
|
||||||
*/ |
|
||||||
private static final String PRIVATE_KEY = "RSAPrivateKey"; |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* RSA最大加密明文大小 |
|
||||||
*/ |
|
||||||
private static final int MAX_ENCRYPT_BLOCK = 117; |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* RSA最大解密密文大小 |
|
||||||
*/ |
|
||||||
private static final int MAX_DECRYPT_BLOCK = 128; |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* <p> |
|
||||||
* 生成密钥对(公钥和私钥) |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static Map<String, Object> genKeyPair() throws Exception { |
|
||||||
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);//"RSA"
|
|
||||||
keyPairGen.initialize(1024); |
|
||||||
KeyPair keyPair = keyPairGen.generateKeyPair();//Generates a key pair 生成公钥私钥.
|
|
||||||
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();//取得公钥
|
|
||||||
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();//取得私钥
|
|
||||||
Map<String, Object> keyMap = new HashMap<String, Object>(2); |
|
||||||
keyMap.put(PUBLIC_KEY, publicKey); |
|
||||||
keyMap.put(PRIVATE_KEY, privateKey); |
|
||||||
return keyMap; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 将公钥私钥(默认base64加密)并转为公钥/私钥字符串还原为对应公钥/私钥 |
|
||||||
* by Z10 |
|
||||||
* |
|
||||||
* @param keyType (publicKey / privateKey) |
|
||||||
* @param keystr |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public Key getKeybyKeyStr(String keyType, String keystr) throws Exception { |
|
||||||
if (keyType == null || !keyType.equals("")) { |
|
||||||
throw new Exception("keyType can not be null"); |
|
||||||
} |
|
||||||
//需要返回公钥
|
|
||||||
if (keyType.equals(keyType)) { |
|
||||||
byte[] keyBytes = decryptBASE64(keystr); |
|
||||||
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key publicK = keyFactory.generatePublic(x509KeySpec); |
|
||||||
return publicK; |
|
||||||
} |
|
||||||
//需要返回私钥
|
|
||||||
else if (keyType.equals("privateKey")) { |
|
||||||
byte[] keyBytes = decryptBASE64(keystr); |
|
||||||
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); |
|
||||||
return privateK; |
|
||||||
} else { |
|
||||||
throw new Exception("keyType'value is incorrect"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* <p> |
|
||||||
* 用私钥对信息生成数字签名 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param data 已加密数据 |
|
||||||
* @param privateKey 私钥(BASE64编码) |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String sign(byte[] data, String privateKey) throws Exception { |
|
||||||
byte[] keyBytes = decryptBASE64(privateKey); |
|
||||||
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec); |
|
||||||
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); |
|
||||||
signature.initSign(privateK); |
|
||||||
signature.update(data); |
|
||||||
return encryptBASE64(signature.sign()); |
|
||||||
} |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* 校验数字签名 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param data 已加密数据 |
|
||||||
* @param publicKey 公钥(BASE64编码) |
|
||||||
* @param sign 数字签名 |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static boolean verify(byte[] data, String publicKey, String sign) |
|
||||||
throws Exception { |
|
||||||
byte[] keyBytes = decryptBASE64(publicKey); |
|
||||||
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
PublicKey publicK = keyFactory.generatePublic(keySpec); |
|
||||||
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); |
|
||||||
signature.initVerify(publicK); |
|
||||||
signature.update(data); |
|
||||||
return signature.verify(decryptBASE64(sign)); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 私钥解密 by zyl |
|
||||||
*/ |
|
||||||
public static byte[] decryptByPrivateKey(byte[] encryptedData, Key privateKey) throws Exception { |
|
||||||
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
|
||||||
cipher.init(Cipher.DECRYPT_MODE, privateKey); |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* 私钥解密 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param encryptedData 已加密数据 |
|
||||||
* @param privateKey 私钥(BASE64编码) |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey) |
|
||||||
throws Exception { |
|
||||||
byte[] keyBytes = decryptBASE64(privateKey); |
|
||||||
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); |
|
||||||
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* 公钥解密 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param encryptedData 已加密数据 |
|
||||||
* @param publicKey 公钥(BASE64编码) |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey) |
|
||||||
throws Exception { |
|
||||||
|
|
||||||
byte[] keyBytes = decryptBASE64(publicKey); |
|
||||||
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key publicK = keyFactory.generatePublic(x509KeySpec); |
|
||||||
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 公钥加密 by zyl |
|
||||||
* |
|
||||||
* @param data |
|
||||||
* @param publicKey |
|
||||||
* @return |
|
||||||
*/ |
|
||||||
public static byte[] encryptByPublicKey(byte[] data, Key publicKey) throws Exception { |
|
||||||
// 对数据加密
|
|
||||||
/*根据公钥加密*/ |
|
||||||
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
|
||||||
cipher.init(Cipher.ENCRYPT_MODE, publicKey); |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* <p> |
|
||||||
* 公钥加密 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param data 源数据 |
|
||||||
* @param publicKey 公钥(BASE64编码) |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] encryptByPublicKey(byte[] data, String publicKey) |
|
||||||
throws Exception { |
|
||||||
byte[] keyBytes = decryptBASE64(publicKey); |
|
||||||
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key publicK = keyFactory.generatePublic(x509KeySpec); |
|
||||||
// 对数据加密
|
|
||||||
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 私钥加密by zyl |
|
||||||
*/ |
|
||||||
public static byte[] encryptByPrivateKey(byte[] data, Key privateKey) throws Exception { |
|
||||||
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
|
||||||
cipher.init(Cipher.ENCRYPT_MODE, privateKey); |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* <p> |
|
||||||
* 私钥加密 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param data 源数据 |
|
||||||
* @param privateKey 私钥(BASE64编码) |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static byte[] encryptByPrivateKey(byte[] data, String privateKey) |
|
||||||
throws Exception { |
|
||||||
byte[] keyBytes = decryptBASE64(privateKey); |
|
||||||
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); |
|
||||||
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); |
|
||||||
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); |
|
||||||
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* <p> |
|
||||||
* 获取私钥 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param keyMap 密钥对 |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String getPrivateKey(Map<String, Object> keyMap) |
|
||||||
throws Exception { |
|
||||||
Key key = (Key) keyMap.get(PRIVATE_KEY); |
|
||||||
return encryptBASE64(key.getEncoded()); |
|
||||||
} |
|
||||||
|
|
||||||
/** */ |
|
||||||
/** |
|
||||||
* <p> |
|
||||||
* 获取公钥 |
|
||||||
* </p> |
|
||||||
* |
|
||||||
* @param keyMap 密钥对 |
|
||||||
* @return |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
public static String getPublicKey(Map<String, Object> keyMap) |
|
||||||
throws Exception { |
|
||||||
Key key = (Key) keyMap.get(PUBLIC_KEY); |
|
||||||
return encryptBASE64(key.getEncoded()); |
|
||||||
} |
|
||||||
|
|
||||||
/* public static void main(String[] args) throws Exception { |
|
||||||
|
|
||||||
|
|
||||||
//test2();
|
|
||||||
test(); |
|
||||||
}*/ |
|
||||||
} |
|
@ -0,0 +1,118 @@ |
|||||||
|
package xyz.fycz.myreader.util; |
||||||
|
|
||||||
|
import android.annotation.SuppressLint; |
||||||
|
import android.graphics.Bitmap; |
||||||
|
import android.util.Base64; |
||||||
|
import android.util.Log; |
||||||
|
|
||||||
|
import com.google.gson.Gson; |
||||||
|
import okhttp3.*; |
||||||
|
import xyz.fycz.myreader.R; |
||||||
|
import xyz.fycz.myreader.application.App; |
||||||
|
import xyz.fycz.myreader.webapi.callback.HttpCallback; |
||||||
|
import xyz.fycz.myreader.webapi.callback.JsonCallback; |
||||||
|
import xyz.fycz.myreader.webapi.callback.URLConnectionCallback; |
||||||
|
import xyz.fycz.myreader.common.APPCONST; |
||||||
|
import xyz.fycz.myreader.common.URLCONST; |
||||||
|
import xyz.fycz.myreader.entity.JsonModel; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.URL; |
||||||
|
import java.net.URLConnection; |
||||||
|
import java.security.SecureRandom; |
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.security.cert.X509Certificate; |
||||||
|
import java.util.*; |
||||||
|
import java.util.concurrent.TimeUnit; |
||||||
|
|
||||||
|
import javax.net.ssl.HttpsURLConnection; |
||||||
|
import javax.net.ssl.SSLContext; |
||||||
|
import javax.net.ssl.SSLSocketFactory; |
||||||
|
import javax.net.ssl.TrustManager; |
||||||
|
import javax.net.ssl.X509TrustManager; |
||||||
|
|
||||||
|
import static java.lang.String.valueOf; |
||||||
|
|
||||||
|
|
||||||
|
public class SSLSocketClient { |
||||||
|
|
||||||
|
public static SSLSocketFactory createSSLSocketFactory() { |
||||||
|
SSLSocketFactory ssfFactory = null; |
||||||
|
try { |
||||||
|
SSLContext sc = SSLContext.getInstance("TLS"); |
||||||
|
sc.init(null, new TrustManager[]{createTrustAllManager()}, new SecureRandom()); |
||||||
|
ssfFactory = sc.getSocketFactory(); |
||||||
|
} catch (Exception e) { |
||||||
|
} |
||||||
|
|
||||||
|
return ssfFactory; |
||||||
|
} |
||||||
|
|
||||||
|
public static X509TrustManager createTrustAllManager() { |
||||||
|
X509TrustManager tm = null; |
||||||
|
try { |
||||||
|
tm = new X509TrustManager() { |
||||||
|
@SuppressLint("TrustAllX509TrustManager") |
||||||
|
public void checkClientTrusted(X509Certificate[] chain, String authType) { |
||||||
|
//do nothing,接受任意客户端证书
|
||||||
|
} |
||||||
|
|
||||||
|
@SuppressLint("TrustAllX509TrustManager") |
||||||
|
public void checkServerTrusted(X509Certificate[] chain, String authType) { |
||||||
|
//do nothing,接受任意服务端证书
|
||||||
|
} |
||||||
|
|
||||||
|
public X509Certificate[] getAcceptedIssuers() { |
||||||
|
return new X509Certificate[0]; |
||||||
|
} |
||||||
|
}; |
||||||
|
} catch (Exception ignored) { |
||||||
|
} |
||||||
|
return tm; |
||||||
|
} |
||||||
|
|
||||||
|
public static Interceptor getHeaderInterceptor() { |
||||||
|
return chain -> { |
||||||
|
Request request = chain.request() |
||||||
|
.newBuilder() |
||||||
|
.addHeader("Keep-Alive", "300") |
||||||
|
.addHeader("Connection", "Keep-Alive") |
||||||
|
.addHeader("Cache-Control", "no-cache") |
||||||
|
.build(); |
||||||
|
return chain.proceed(request); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Trust every server - dont check for any certificate |
||||||
|
*/ |
||||||
|
public static void trustAllHosts() { |
||||||
|
final String TAG = "trustAllHosts"; |
||||||
|
// Create a trust manager that does not validate certificate chains
|
||||||
|
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { |
||||||
|
|
||||||
|
public java.security.cert.X509Certificate[] getAcceptedIssuers() { |
||||||
|
return new java.security.cert.X509Certificate[]{}; |
||||||
|
} |
||||||
|
|
||||||
|
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||||
|
Log.i(TAG, "checkClientTrusted"); |
||||||
|
} |
||||||
|
|
||||||
|
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||||
|
Log.i(TAG, "checkServerTrusted"); |
||||||
|
} |
||||||
|
}}; |
||||||
|
|
||||||
|
// Install the all-trusting trust manager
|
||||||
|
try { |
||||||
|
SSLContext sc = SSLContext.getInstance("TLS"); |
||||||
|
sc.init(null, trustAllCerts, new java.security.SecureRandom()); |
||||||
|
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,125 +0,0 @@ |
|||||||
package xyz.fycz.myreader.webapi; |
|
||||||
|
|
||||||
import android.graphics.Bitmap; |
|
||||||
import android.graphics.BitmapFactory; |
|
||||||
import android.util.Base64; |
|
||||||
import android.util.Log; |
|
||||||
|
|
||||||
import xyz.fycz.myreader.webapi.callback.JsonCallback; |
|
||||||
import xyz.fycz.myreader.common.APPCONST; |
|
||||||
import xyz.fycz.myreader.common.URLCONST; |
|
||||||
import xyz.fycz.myreader.entity.JsonModel; |
|
||||||
import xyz.fycz.myreader.util.HttpUtil; |
|
||||||
import xyz.fycz.myreader.util.RSAUtilV2; |
|
||||||
import xyz.fycz.myreader.util.StringHelper; |
|
||||||
import com.google.gson.Gson; |
|
||||||
import xyz.fycz.myreader.webapi.callback.HttpCallback; |
|
||||||
import xyz.fycz.myreader.webapi.callback.ResultCallback; |
|
||||||
|
|
||||||
import java.io.BufferedReader; |
|
||||||
import java.io.File; |
|
||||||
import java.io.InputStream; |
|
||||||
import java.io.InputStreamReader; |
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
|
|
||||||
public class HttpDataSource { |
|
||||||
|
|
||||||
/** |
|
||||||
* http请求 (get) ps:获取html |
|
||||||
* @param url |
|
||||||
* @param callback |
|
||||||
*/ |
|
||||||
public static void httpGet_html(String url, final String charsetName, boolean isRefresh, final ResultCallback callback){ |
|
||||||
Log.d("HttpGet URl", url); |
|
||||||
HttpUtil.sendGetRequest_okHttp(url, isRefresh, new HttpCallback() { |
|
||||||
@Override |
|
||||||
public void onFinish(Bitmap bm) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void onFinish(InputStream in) { |
|
||||||
try { |
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in, charsetName)); |
|
||||||
StringBuilder response = new StringBuilder(); |
|
||||||
String line = reader.readLine(); |
|
||||||
while (line != null) { |
|
||||||
response.append(line); |
|
||||||
line = reader.readLine(); |
|
||||||
} |
|
||||||
if (callback != null) { |
|
||||||
Log.d("Http", "read finish:" + response.toString()); |
|
||||||
callback.onFinish(response.toString(),0); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void onFinish(String response) { |
|
||||||
Log.d("Local", "read finish:" + response); |
|
||||||
callback.onFinish(response, 0); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void onError(Exception e) { |
|
||||||
if (callback != null) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* http请求 (post) 获取蓝奏云直链 |
|
||||||
* @param url |
|
||||||
* @param output |
|
||||||
* @param callback |
|
||||||
*/ |
|
||||||
public static void httpPost(String url, String output, final ResultCallback callback, final String referer) { |
|
||||||
Log.d("HttpPost:", url + "&" + output); |
|
||||||
HttpUtil.sendPostRequest(url, output, new HttpCallback() { |
|
||||||
@Override |
|
||||||
public void onFinish(Bitmap bm) { |
|
||||||
|
|
||||||
} |
|
||||||
@Override |
|
||||||
public void onFinish(InputStream in) { |
|
||||||
try { |
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); |
|
||||||
StringBuilder response = new StringBuilder(); |
|
||||||
String line = reader.readLine(); |
|
||||||
while (line != null) { |
|
||||||
response.append(line); |
|
||||||
line = reader.readLine(); |
|
||||||
} |
|
||||||
if (callback != null) { |
|
||||||
Log.d("Http", "read finish:" + response); |
|
||||||
callback.onFinish(response.toString(), 1); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void onFinish(String response) { |
|
||||||
Log.e("http", response); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void onError(Exception e) { |
|
||||||
if (callback != null) { |
|
||||||
callback.onError(e); |
|
||||||
} |
|
||||||
} |
|
||||||
}, referer); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
Loading…
Reference in new issue