日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android文件MD5/SHA1/SHA256校验

發布時間:2023/12/20 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android文件MD5/SHA1/SHA256校验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????一般進行文件下載需求時,都會附帶有文件完整性和正確性校驗,避免下載的文件不完整或者被第三方劫持注入,貌似很多都是采用MD5校驗,但也有采用sha1或者sha256校驗,最近做的兩個項目中剛好先后遇到了md5和sha256校驗,跟了一下MessageDigest源碼,提取出工具類供以后使用,同時在此貢獻出來,如有不正確的地方歡迎指正。

? ? 1、采用枚舉定義需要校驗的類型,屏蔽直接傳入不支持的校驗方式,增加容錯率:

public enum TypeEnum {MD5, SHA1, SHA256}

? ? 2、獲取指定文件的md5/sha1/sha256

private static String getFileSignature(File file, TypeEnum typeEnum) {MessageDigest digest;String type = "";switch (typeEnum) {case MD5:type = "MD5";break;case SHA1:type = "SHA-1";break;case SHA256:type = "SHA-256";break;}if (TextUtils.isEmpty(type)) {LogUtil.e(Constants.LOG_TAG, "type undefined");return null;}try {digest = MessageDigest.getInstance(type);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}InputStream is;try {is = new FileInputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();LogUtil.e(TAG, "Exception while getting FileInputStream");return null;}byte[] buffer = new byte[8192];int read;try {while ((read = is.read(buffer)) > 0) {digest.update(buffer, 0, read);}byte[] md5sum = digest.digest();BigInteger bigInt = new BigInteger(1, md5sum);String output = bigInt.toString(16);output = String.format("%32s", output).replace(' ', '0');return output;} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG,"Unable to process file for ");return null;} finally {try {is.close();} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG, "Exception on closing inputstream:" );}}}

3、與服務器給的文件md5/sha1/sha256對比

public static boolean validateFile(TypeEnum typeEnum, String standardStr, File fileToCheck) {if (TextUtils.isEmpty(standardStr) || fileToCheck == null) {LogUtil.e(TAG, "MD5 string empty or updateFile null");return false;}String calculatedDigest = getFileSignature(fileToCheck, typeEnum);if (TextUtils.isEmpty(calculatedDigest)) {LogUtil.d(TAG, "calculatedDigest null");return false;}return calculatedDigest.equalsIgnoreCase(standardStr);}

全部代碼如下:

public class FileValidateUtil {private static final String TAG = Constants.LOG_TAG;public enum TypeEnum {MD5, SHA1, SHA256}/*** @param typeEnum* @param standardStr* @param fileToCheck* @return*/public static boolean validateFile(TypeEnum typeEnum, String standardStr, File fileToCheck) {if (TextUtils.isEmpty(standardStr) || fileToCheck == null) {LogUtil.e(TAG, "MD5 string empty or updateFile null");return false;}String calculatedDigest = getFileSignature(fileToCheck, typeEnum);if (TextUtils.isEmpty(calculatedDigest)) {LogUtil.d(TAG, "calculatedDigest null");return false;}return calculatedDigest.equalsIgnoreCase(standardStr);}private static String getFileSignature(File file, TypeEnum typeEnum) {MessageDigest digest;String type = "";switch (typeEnum) {case MD5:type = "MD5";break;case SHA1:type = "SHA-1";break;case SHA256:type = "SHA-256";break;}if (TextUtils.isEmpty(type)) {LogUtil.e(Constants.LOG_TAG, "type undefined");return null;}try {digest = MessageDigest.getInstance(type);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}InputStream is;try {is = new FileInputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();LogUtil.e(TAG, "Exception while getting FileInputStream");return null;}byte[] buffer = new byte[8192];int read;try {while ((read = is.read(buffer)) > 0) {digest.update(buffer, 0, read);}byte[] md5sum = digest.digest();BigInteger bigInt = new BigInteger(1, md5sum);String output = bigInt.toString(16);output = String.format("%32s", output).replace(' ', '0');return output;} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG,"Unable to process file for ");return null;} finally {try {is.close();} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG, "Exception on closing inputstream:" );}}}}




總結

以上是生活随笔為你收集整理的Android文件MD5/SHA1/SHA256校验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。