Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiaoxuan_i809
AndroidUtilCode
提交
7f48af50
A
AndroidUtilCode
项目概览
xiaoxuan_i809
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7f48af50
编写于
8月 05, 2016
作者:
C
cmj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
加密新增MD5盐加密,完善NetworkUtils
上级
45a79e49
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
332 addition
and
241 deletion
+332
-241
README.md
README.md
+6
-4
about_encrypt.md
about_encrypt.md
+111
-98
about_network.md
about_network.md
+136
-69
androidframework/src/main/java/com/blankj/androidframework/utils/EncryptUtils.java
.../java/com/blankj/androidframework/utils/EncryptUtils.java
+76
-68
androidframework/src/main/java/com/blankj/androidframework/utils/NetworkUtils.java
.../java/com/blankj/androidframework/utils/NetworkUtils.java
+1
-1
update_log.md
update_log.md
+2
-1
未找到文件。
README.md
浏览文件 @
7f48af50
# Android开发人员不得不收集的代码(
不断更新
)
# Android开发人员不得不收集的代码(
持续更新中
)
为方便查找,已进行大致归类,其目录如下所示:
> - [App相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_app.md)→[AppUtils.java](https://github.com/Blankj/AndroidUtilCode/blob/master/androidframework/src/main/java/com/blankj/androidframework/utils/AppUtils.java)
> - 安装指定路径下的Apk *installApp*
...
...
@@ -30,12 +30,13 @@
> - [网络相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_network.md)→[NetworkUtils.java](https://github.com/Blankj/AndroidUtilCode/blob/master/androidframework/src/main/java/com/blankj/androidframework/utils/NetworkUtils.java)
> - 打开网络设置界面 *openWirelessSettings*
> - 判断是否网络连接 *isConnected*
> - 判断网络是否可用 *isAvailable*
> - 判断网络是否连接 *isConnected*
> - 判断网络是否是4G *is4G*
> - 判断wifi是否连接状态 *isWifiConnected*
> - 获取移动网络运营商名称 *getNetworkOperatorName*
> - 获取移动终端类型 *getPhoneType*
> - 获取连接的网络类型(2G,3G,4G) *getCurNetworkType*
> - 获取当前手机的网络类型(WIFI,2G,3G,4G) *getNetWorkStatus*
> - 获取当前的网络类型(WIFI,2G,3G,4G) *getNetWorkType* *getNetWorkTypeName*
> - [手机相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_phone.md)→[PhoneUtils.java](https://github.com/Blankj/AndroidUtilCode/blob/master/androidframework/src/main/java/com/blankj/androidframework/utils/PhoneUtils.java)
> - 判断设备是否是手机 *isPhone*
...
...
@@ -99,6 +100,7 @@
#### 2016/08/02 新增隐藏状态栏,注释更加全面,工具类已封装,写的时候真的是一个一个测试过去的,宝宝心里苦
#### 2016/08/03 修复在onCreate中获取view尺寸的bug,MD5和SHA的Bug修复完成(在此感谢ssyijiu)
#### 2016/08/04 新增时间工具类(在此感谢yi520000给的补充),手机正则分简单和精确(在此感谢MIkeeJY),新增判断是否锁屏,注释使用<p>分段落,目录按首字母排序
#### 2016/08/05 加密新增MD5盐加密,完善NetworkUtils
##[关于Blankj](http://blankj.com/about)
\ No newline at end of file
about_encrypt.md
浏览文件 @
7f48af50
...
...
@@ -2,87 +2,91 @@
### MD5加密
```
java
/**
* 一个byte转为2个hex字符
*/
public
static
String
bytes2Hex
(
byte
[]
src
)
{
char
[]
res
=
new
char
[
src
.
length
*
2
];
final
char
hexDigits
[]
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
for
(
int
i
=
0
,
j
=
0
;
i
<
src
.
length
;
i
++)
{
res
[
j
++]
=
hexDigits
[
src
[
i
]
>>>
4
&
0x0f
];
res
[
j
++]
=
hexDigits
[
src
[
i
]
&
0x0f
];
}
return
new
String
(
res
);
* MD5加密
*
* @param data 明文字符串
* @return 密文
*/
public
static
String
getMD5
(
String
data
)
{
return
getMD5
(
data
.
getBytes
());
}
/**
* MD5加密
*
* @param data 明文
* @return 密文
*/
public
static
String
getMD5
(
String
data
)
{
return
TextUtils
.
isEmpty
(
data
)
?
""
:
getMD5
(
data
.
getBytes
());
* MD5加密
*
* @param data 明文字符串
* @param salt 盐
* @return 密文
*/
public
static
String
getMD5
(
String
data
,
String
salt
)
{
return
bytes2Hex
(
encryptMD5
((
data
+
salt
).
getBytes
()));
}
/**
* MD5加密
*
* @param data 明文字节数组
* @return 密文
*/
* MD5加密
*
* @param data 明文字节数组
* @return 密文
*/
public
static
String
getMD5
(
byte
[]
data
)
{
if
(
data
.
length
>
0
)
{
return
bytes2Hex
(
encryptMD5
(
data
));
}
return
""
;
return
bytes2Hex
(
encryptMD5
(
data
));
}
/**
* MD5加密
*
* @param data 明文字节数组
* @return 密文字节数组
*/
* MD5加密
*
* @param data 明文字节数组
* @param salt 盐字节数组
* @return 密文
*/
public
static
String
getMD5
(
byte
[]
data
,
byte
[]
salt
)
{
byte
[]
dataSalt
=
new
byte
[
data
.
length
+
salt
.
length
];
System
.
arraycopy
(
data
,
0
,
dataSalt
,
0
,
data
.
length
);
System
.
arraycopy
(
salt
,
0
,
dataSalt
,
data
.
length
,
salt
.
length
);
return
bytes2Hex
(
encryptMD5
(
dataSalt
));
}
/**
* MD5加密
*
* @param data 明文字节数组
* @return 密文字节数组
*/
public
static
byte
[]
encryptMD5
(
byte
[]
data
)
{
if
(
data
.
length
>
0
)
{
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
md
.
update
(
data
);
return
md
.
digest
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
md
.
update
(
data
);
return
md
.
digest
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
return
n
ull
;
return
n
ew
byte
[
0
]
;
}
/**
* 获取文件的MD5校验码
*
* @param filePath 文件路径
* @return 文件的MD5校验码
*/
* 获取文件的MD5校验码
*
* @param filePath 文件路径
* @return 文件的MD5校验码
*/
public
static
String
getMD5File
(
String
filePath
)
{
if
(!
TextUtils
.
isEmpty
(
filePath
))
{
FileInputStream
in
=
null
;
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
in
=
new
FileInputStream
(
filePath
);
int
len
;
byte
[]
buffer
=
new
byte
[
1024
];
while
((
len
=
in
.
read
(
buffer
))
!=
-
1
)
{
md
.
update
(
buffer
,
0
,
len
);
}
return
bytes2Hex
(
md
.
digest
());
}
catch
(
NoSuchAlgorithmException
|
IOException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
IOException
ignored
)
{
}
FileInputStream
in
=
null
;
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
in
=
new
FileInputStream
(
filePath
);
int
len
;
byte
[]
buffer
=
new
byte
[
1024
];
while
((
len
=
in
.
read
(
buffer
))
!=
-
1
)
{
md
.
update
(
buffer
,
0
,
len
);
}
return
bytes2Hex
(
md
.
digest
());
}
catch
(
NoSuchAlgorithmException
|
IOException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
IOException
ignored
)
{
}
}
}
...
...
@@ -93,43 +97,52 @@ public static String getMD5File(String filePath) {
### SHA加密
```
/**
* SHA加密
*
* @param data 明文
* @return 密文
*/
* SHA加密
*
* @param data 明文字符串
* @return 密文
*/
public static String getSHA(String data) {
return
TextUtils.isEmpty(data) ? "" :
getSHA(data.getBytes());
return getSHA(data.getBytes());
}
/**
* SHA加密
*
* @param data 明文字节数组
* @return 密文
*/
* SHA加密
*
* @param data 明文字节数组
* @return 密文
*/
public static String getSHA(byte[] data) {
if (data.length > 0) {
return bytes2Hex(encryptSHA(data));
}
return "";
return bytes2Hex(encryptSHA(data));
}
/**
* SHA加密
* @param data 明文字节数组
* @return 密文字节数组
*/
* SHA加密
*
* @param data 明文字节数组
* @return 密文字节数组
*/
public static byte[] encryptSHA(byte[] data) {
if (data.length > 0) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(data);
return md.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(data);
return md.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return new byte[0];
}
/**
* 一个byte转为2个hex字符
*/
public static String bytes2Hex(byte[] src) {
char[] res = new char[src.length * 2];
final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
for (int i = 0, j = 0; i < src.length; i++) {
res[j++] = hexDigits[src[i] >>> 4 & 0x0f];
res[j++] = hexDigits[src[i] & 0x0f];
}
return n
ull
;
return n
ew String(res)
;
}
```
about_network.md
浏览文件 @
7f48af50
...
...
@@ -14,20 +14,51 @@ public static void openWirelessSettings(Context context) {
}
```
### 判断
是否网络连接
### 判断
网络是否可用
```
java
/**
* 判断是否网络连接
* 获取活动网路信息
*/
private
static
NetworkInfo
getActiveNetworkInfo
(
Context
context
)
{
ConnectivityManager
cm
=
(
ConnectivityManager
)
context
.
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
);
return
cm
.
getActiveNetworkInfo
();
}
/**
* 判断网络是否可用
* <p>需添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
*/
public
static
boolean
isAvailable
(
Context
context
)
{
NetworkInfo
info
=
getActiveNetworkInfo
(
context
);
return
info
!=
null
&&
info
.
isAvailable
();
}
```
### 判断网络是否连接
```
java
/**
* 判断网络是否连接
* <p>需添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
*/
public
static
boolean
isConnected
(
Context
context
)
{
ConnectivityManager
cm
=
(
ConnectivityManager
)
context
.
getSystemService
(
Activity
.
CONNECTIVITY_SERVICE
);
NetworkInfo
info
=
cm
.
getActiveNetworkInfo
();
NetworkInfo
info
=
getActiveNetworkInfo
(
context
);
return
info
!=
null
&&
info
.
isConnected
();
}
```
### 判断网络是否是4G
```
java
/**
* 判断网络是否是4G
* <p>需添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
*/
public
static
boolean
is4G
(
Context
context
)
{
NetworkInfo
info
=
getActiveNetworkInfo
(
context
);
return
info
!=
null
&&
info
.
isAvailable
()
&&
info
.
getSubtype
()
==
TelephonyManager
.
NETWORK_TYPE_LTE
;
}
```
### 判断wifi是否连接状态
```
java
/**
...
...
@@ -58,12 +89,14 @@ public static String getNetworkOperatorName(Context context) {
```
java
/**
* 获取移动终端类型
* <pre>
* PHONE_TYPE_NONE : 0 手机制式未知
* PHONE_TYPE_GSM : 1 手机制式为GSM,移动和联通
* PHONE_TYPE_CDMA : 2 手机制式为CDMA,电信
* PHONE_TYPE_SIP : 3
* <pre/>
*
* @return 手机制式
* <ul>
* <li>PHONE_TYPE_NONE : 0 手机制式未知</li>
* <li>PHONE_TYPE_GSM : 1 手机制式为GSM,移动和联通</li>
* <li>PHONE_TYPE_CDMA : 2 手机制式为CDMA,电信</li>
* <li>PHONE_TYPE_SIP : 3</li>
* </ul>
*/
public
static
int
getPhoneType
(
Context
context
)
{
TelephonyManager
tm
=
(
TelephonyManager
)
context
...
...
@@ -72,72 +105,106 @@ public static int getPhoneType(Context context) {
}
```
### 获取
连接的网络类型(
2G,3G,4G)
### 获取
当前的网络类型(WIFI,
2G,3G,4G)
```
java
/**
* 获取连接的网络类型(2G,3G,4G)
* <p>联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO
* 获取当前的网络类型(WIFI,2G,3G,4G)
* <p>需添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
*
* @return 网络类型
* <ul>
* <li>NETWORK_WIFI = 1;</li>
* <li>NETWORK_4G = 4;</li>
* <li>NETWORK_3G = 3;</li>
* <li>NETWORK_2G = 2;</li>
* <li>NETWORK_UNKNOWN = 5;</li>
* <li>NETWORK_NO = -1;</li>
* </ul>
*/
public
static
int
getNetTpye
(
Context
context
)
{
TelephonyManager
telephonyManager
=
(
TelephonyManager
)
context
.
getSystemService
(
Context
.
TELEPHONY_SERVICE
);
switch
(
telephonyManager
.
getNetworkType
())
{
case
TelephonyManager
.
NETWORK_TYPE_GPRS
:
case
TelephonyManager
.
NETWORK_TYPE_EDGE
:
case
TelephonyManager
.
NETWORK_TYPE_CDMA
:
case
TelephonyManager
.
NETWORK_TYPE_1xRTT
:
case
TelephonyManager
.
NETWORK_TYPE_IDEN
:
return
Constants
.
NETWORK_CLASS_2_G
;
case
TelephonyManager
.
NETWORK_TYPE_UMTS
:
case
TelephonyManager
.
NETWORK_TYPE_EVDO_0
:
case
TelephonyManager
.
NETWORK_TYPE_EVDO_A
:
case
TelephonyManager
.
NETWORK_TYPE_HSDPA
:
case
TelephonyManager
.
NETWORK_TYPE_HSUPA
:
case
TelephonyManager
.
NETWORK_TYPE_HSPA
:
case
TelephonyManager
.
NETWORK_TYPE_EVDO_B
:
case
TelephonyManager
.
NETWORK_TYPE_EHRPD
:
case
TelephonyManager
.
NETWORK_TYPE_HSPAP
:
return
Constants
.
NETWORK_CLASS_3_G
;
case
TelephonyManager
.
NETWORK_TYPE_LTE
:
return
Constants
.
NETWORK_CLASS_4_G
;
default
:
return
Constants
.
NETWORK_CLASS_UNKNOWN
;
public
static
int
getNetWorkType
(
Context
context
)
{
int
netType
=
NETWORK_NO
;
NetworkInfo
info
=
getActiveNetworkInfo
(
context
);
if
(
info
!=
null
&&
info
.
isAvailable
())
{
if
(
info
.
getType
()
==
ConnectivityManager
.
TYPE_WIFI
)
{
netType
=
NETWORK_WIFI
;
}
else
if
(
info
.
getType
()
==
ConnectivityManager
.
TYPE_MOBILE
)
{
switch
(
info
.
getSubtype
())
{
case
NETWORK_TYPE_GSM:
case
TelephonyManager
.
NETWORK_TYPE_GPRS
:
case
TelephonyManager
.
NETWORK_TYPE_CDMA
:
case
TelephonyManager
.
NETWORK_TYPE_EDGE
:
case
TelephonyManager
.
NETWORK_TYPE_1xRTT
:
case
TelephonyManager
.
NETWORK_TYPE_IDEN
:
netType
=
NETWORK_2G
;
break
;
case
NETWORK_TYPE_TD_SCDMA:
case
TelephonyManager
.
NETWORK_TYPE_EVDO_A
:
case
TelephonyManager
.
NETWORK_TYPE_UMTS
:
case
TelephonyManager
.
NETWORK_TYPE_EVDO_0
:
case
TelephonyManager
.
NETWORK_TYPE_HSDPA
:
case
TelephonyManager
.
NETWORK_TYPE_HSUPA
:
case
TelephonyManager
.
NETWORK_TYPE_HSPA
:
case
TelephonyManager
.
NETWORK_TYPE_EVDO_B
:
case
TelephonyManager
.
NETWORK_TYPE_EHRPD
:
case
TelephonyManager
.
NETWORK_TYPE_HSPAP
:
netType
=
NETWORK_3G
;
break
;
case
NETWORK_TYPE_IWLAN:
case
TelephonyManager
.
NETWORK_TYPE_LTE
:
netType
=
NETWORK_4G
;
break
;
default
:
String
subtypeName
=
info
.
getSubtypeName
();
if
(
subtypeName
.
equalsIgnoreCase
(
"TD-SCDMA"
)
||
subtypeName
.
equalsIgnoreCase
(
"WCDMA"
)
||
subtypeName
.
equalsIgnoreCase
(
"CDMA2000"
))
{
netType
=
NETWORK_3G
;
}
else
{
netType
=
NETWORK_UNKNOWN
;
}
break
;
}
}
else
{
netType
=
NETWORK_UNKNOWN
;
}
}
return
netType
;
}
public
class
Constants
{
// Unknown network class
public
static
final
int
NETWORK_CLASS_UNKNOWN
=
0
;
// wifi network
public
static
final
int
NETWORK_WIFI
=
1
;
// "2G" networks
public
static
final
int
NETWORK_CLASS_2_G
=
2
;
// "3G" networks
public
static
final
int
NETWORK_CLASS_3_G
=
3
;
// "4G" networks
public
static
final
int
NETWORK_CLASS_4_G
=
4
;
}
```
### 获取当前手机的网络类型(WIFI,2G,3G,4G)
```
java
/**
* 获取当前手机的网络类型(WIFI,2G,3G,4G)
* <p>需添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
* 需要用到上面的方法
* 获取当前的网络类型(WIFI,2G,3G,4G)
* 依赖上面的方法
*
* @param context
* @return 网络类型名称
* <ul>
* <li>NETWORK_WIFI </li>
* <li>NETWORK_4G </li>
* <li>NETWORK_3G </li>
* <li>NETWORK_2G </li>
* <li>NETWORK_UNKNOWN</li>
* <li>NETWORK_NO </li>
* </ul>
*/
public
static
int
getCurNetworkType
(
Context
context
)
{
int
netWorkType
=
Constants
.
NETWORK_CLASS_UNKNOWN
;
ConnectivityManager
cm
=
(
ConnectivityManager
)
context
.
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
);
NetworkInfo
networkInfo
=
cm
.
getActiveNetworkInfo
();
if
(
networkInfo
!=
null
&&
networkInfo
.
isConnected
())
{
int
type
=
networkInfo
.
getType
();
if
(
type
==
ConnectivityManager
.
TYPE_WIFI
)
{
netWorkType
=
Constants
.
NETWORK_WIFI
;
}
else
if
(
type
==
ConnectivityManager
.
TYPE_MOBILE
)
{
netWorkType
=
getNetworkTpye
(
context
);
}
public
static
String
getNetWorkTypeName
(
Context
context
)
{
switch
(
getNetWorkType
(
context
))
{
case
NETWORK_WIFI:
return
"NETWORK_WIFI"
;
case
NETWORK_4G:
return
"NETWORK_4G"
;
case
NETWORK_3G:
return
"NETWORK_3G"
;
case
NETWORK_2G:
return
"NETWORK_2G"
;
case
NETWORK_NO:
return
"NETWORK_NO"
;
default
:
return
"NETWORK_UNKNOWN"
;
}
return
netWorkType
;
}
```
androidframework/src/main/java/com/blankj/androidframework/utils/EncryptUtils.java
浏览文件 @
7f48af50
package
com.blankj.androidframework.utils
;
import
android.text.TextUtils
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.security.MessageDigest
;
...
...
@@ -18,15 +16,25 @@ public class EncryptUtils {
throw
new
UnsupportedOperationException
(
"u can't fuck me..."
);
}
/**
* MD5加密
*
* @param data 明文
* @param data 明文
字符串
* @return 密文
*/
public
static
String
getMD5
(
String
data
)
{
return
TextUtils
.
isEmpty
(
data
)
?
""
:
getMD5
(
data
.
getBytes
());
return
getMD5
(
data
.
getBytes
());
}
/**
* MD5加密
*
* @param data 明文字符串
* @param salt 盐
* @return 密文
*/
public
static
String
getMD5
(
String
data
,
String
salt
)
{
return
bytes2Hex
(
encryptMD5
((
data
+
salt
).
getBytes
()));
}
/**
...
...
@@ -36,10 +44,21 @@ public class EncryptUtils {
* @return 密文
*/
public
static
String
getMD5
(
byte
[]
data
)
{
if
(
data
.
length
>
0
)
{
return
bytes2Hex
(
encryptMD5
(
data
));
}
return
""
;
return
bytes2Hex
(
encryptMD5
(
data
));
}
/**
* MD5加密
*
* @param data 明文字节数组
* @param salt 盐字节数组
* @return 密文
*/
public
static
String
getMD5
(
byte
[]
data
,
byte
[]
salt
)
{
byte
[]
dataSalt
=
new
byte
[
data
.
length
+
salt
.
length
];
System
.
arraycopy
(
data
,
0
,
dataSalt
,
0
,
data
.
length
);
System
.
arraycopy
(
salt
,
0
,
dataSalt
,
data
.
length
,
salt
.
length
);
return
bytes2Hex
(
encryptMD5
(
dataSalt
));
}
/**
...
...
@@ -49,19 +68,16 @@ public class EncryptUtils {
* @return 密文字节数组
*/
public
static
byte
[]
encryptMD5
(
byte
[]
data
)
{
if
(
data
.
length
>
0
)
{
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
md
.
update
(
data
);
return
md
.
digest
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
md
.
update
(
data
);
return
md
.
digest
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
return
n
ull
;
return
n
ew
byte
[
0
]
;
}
/**
* 获取文件的MD5校验码
*
...
...
@@ -69,62 +85,56 @@ public class EncryptUtils {
* @return 文件的MD5校验码
*/
public
static
String
getMD5File
(
String
filePath
)
{
if
(!
TextUtils
.
isEmpty
(
filePath
))
{
FileInputStream
in
=
null
;
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
in
=
new
FileInputStream
(
filePath
);
int
len
;
byte
[]
buffer
=
new
byte
[
1024
];
while
((
len
=
in
.
read
(
buffer
))
!=
-
1
)
{
md
.
update
(
buffer
,
0
,
len
);
}
return
bytes2Hex
(
md
.
digest
());
}
catch
(
NoSuchAlgorithmException
|
IOException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
IOException
ignored
)
{
}
FileInputStream
in
=
null
;
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
in
=
new
FileInputStream
(
filePath
);
int
len
;
byte
[]
buffer
=
new
byte
[
1024
];
while
((
len
=
in
.
read
(
buffer
))
!=
-
1
)
{
md
.
update
(
buffer
,
0
,
len
);
}
return
bytes2Hex
(
md
.
digest
());
}
catch
(
NoSuchAlgorithmException
|
IOException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
IOException
ignored
)
{
}
}
}
return
""
;
}
/**
* SHA加密
*
* @param data 明文字符串
* @return 密文
*/
public
static
String
getSHA
(
String
data
)
{
return
getSHA
(
data
.
getBytes
());
}
/**
* SHA加密
*
* @param data 明文
* @return 密文
*/
public
static
String
getSHA
(
String
data
)
{
return
TextUtils
.
isEmpty
(
data
)
?
""
:
getSHA
(
data
.
getBytes
());
}
/**
* SHA加密
*
* @param data 明文字节数组
* @return 密文
*/
public
static
String
getSHA
(
byte
[]
data
)
{
if
(
data
.
length
>
0
)
{
/**
* SHA加密
*
* @param data 明文字节数组
* @return 密文
*/
public
static
String
getSHA
(
byte
[]
data
)
{
return
bytes2Hex
(
encryptSHA
(
data
));
}
return
""
;
}
/**
* SHA加密
* @param data 明文字节数组
* @return 密
文字节数组
*/
public
static
byte
[]
encryptSHA
(
byte
[]
data
)
{
if
(
data
.
length
>
0
)
{
/**
* SHA加密
*
* @param data 明
文字节数组
* @return 密文字节数组
*/
public
static
byte
[]
encryptSHA
(
byte
[]
data
)
{
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"SHA"
);
md
.
update
(
data
);
...
...
@@ -132,10 +142,8 @@ public static byte[] encryptSHA(byte[] data) {
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
return
new
byte
[
0
];
}
return
null
;
}
/**
* 一个byte转为2个hex字符
...
...
androidframework/src/main/java/com/blankj/androidframework/utils/NetworkUtils.java
浏览文件 @
7f48af50
...
...
@@ -80,7 +80,7 @@ public class NetworkUtils {
* 获取手机连接的网络类型(2G,3G,4G)
* <p>联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO
*/
public
static
int
getNetworkT
yp
e
(
Context
context
)
{
public
static
int
getNetworkT
py
e
(
Context
context
)
{
TelephonyManager
tm
=
(
TelephonyManager
)
context
.
getSystemService
(
Context
.
TELEPHONY_SERVICE
);
switch
(
tm
.
getNetworkType
())
{
...
...
update_log.md
浏览文件 @
7f48af50
...
...
@@ -7,4 +7,5 @@
#### 2016/08/02 wifi设置界面bug修复,注释排版还在修改,获取mac地址增加判空,新增QQ群:74721490,欢迎加入
#### 2016/08/02 新增隐藏状态栏,注释更加全面,工具类已封装,写的时候真的是一个一个测试过去的,宝宝心里苦
#### 2016/08/03 修复在onCreate中获取view尺寸的bug,MD5和SHA的Bug修复完成(在此感谢ssyijiu)
#### 2016/08/04 新增时间工具类(在此感谢yi520000给的补充),手机正则分简单和精确(在此感谢MIkeeJY),新增判断是否锁屏,注释使用<p>分段落
\ No newline at end of file
#### 2016/08/04 新增时间工具类(在此感谢yi520000给的补充),手机正则分简单和精确(在此感谢MIkeeJY),新增判断是否锁屏,注释使用<p>分段落,目录按首字母排序
#### 2016/08/05 加密新增MD5盐加密,完善NetworkUtils
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录