1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android: Kotlin でファイルの MD5 を計算する

Last updated at Posted at 2022-08-23

Android や JVM 環境の Kotlin でファイルの MD5 を計算する実装です。

前提

InputStream からデータを読み込み、JDK の java.security を利用して MD5 を計算する方針とします。

ファイルサイズがある程度大きい (1MB ~) 状況を想定し InputStream からの読み込みとしています。

実装

import java.io.InputStream
import java.security.DigestInputStream
import java.security.MessageDigest

...
val inputStream: InputStream = ... // File の inputStream など
val md5 = DigestInputStream(inputStream, MessageDigest.getInstance("MD5")).use { input ->
    val buffer = ByteArray(1024 * 1024) // buffer size は任意のサイズ (ここでは1MB)
    var read = 0
    while (read != -1) {
        // ファイル末尾まで読み込む
        read = input.read(buffer)
    }
    input.messageDigest.digest().joinToString("") { "%02x".format(it) }
}
// md5(例) => "fb0bf2b96b28cf776cd898e4098485e2"

解説

java.security.MessageDigest により MD5 を計算します。入力が InputStream の場合は java.security.DigestInputStream にデータを通すことで MD5 が計算されます。

MessageDigest, DigestInputStream は Android でも利用可能です。

MessageDigest#digest() で計算した MD5 は ByteArray 形式であるため "%02x".format(...) により 16 進数文字列へ変換します。

InputStream を使わない場合

InputStream ではなく ByteArray でデータを保持している場合は DigestInputStream を使わずに MessageDigest#digest(input: ByteArray) だけで計算可能です

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?