Итак, несколько дней назад я спросил this question здесь о SO о генерации суммы md5 из объекта android.graphics.Bitmap. Пользователь Леонидос оказал большую помощь, и его предложенный метод работает. Но сумма md5, которую я создал заранее, используя ту же картинку, дает другую сумму.Создание суммы md5 в python для изображения, которое затем проверяется в приложении для Android
Андроида код, я использую выглядит следующим образом:
public String md5ForBitmap(Bitmap bitmap)
{
String hash = "";
try
{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapBytes = stream.toByteArray();
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(bitmapBytes);
byte[] digestedBytes = messageDigest.digest();
BigInteger intRep = new BigInteger(1, digestedBytes);
hash = intRep.toString(16);
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return hash;
}
Хотя сценарий питона выглядит следующим образом:
def begin(path):
os.chdir(path)
files = glob.glob("*")
for file in files:
processFile(file, path)
def processFile(file, folder):
with open(file, "r") as picture:
fileContents = picture.read()
md5 = hashlib.md5()
md5.update(fileContents)
hash = md5.hexdigest()
print file + " : " + hash
Андроида приложение получает строку JSON с сервера, содержит URL-адрес изображения и сумму md5. Сумма md5 была рассчитана заранее с помощью скрипта python. После того, как изображение было загружено, мне остается объект Bitmap, который затем я использую в приложении.
Leonidos предположил, что объект Bitmap не обрабатывается так же, как python обрабатывает данные изображения, и мне нужно будет найти сумму md5 необработанных данных изображения в Android. Этот звук для меня был вполне правдоподобным объяснением. Просто я действительно потеряюсь, когда дело доходит до всего этого.
Итак, каков правильный способ сделать это?
Создает ли растровое изображение как файл? если это так, я могу опубликовать фрагмент java и python, который я использовал для получения md5 файла изображения, и он работает для меня (оба возвращают одинаковое значение для того же файла). Шахта начинается с пути к файлу, хотя, если вы получаете растровое изображение без файла, это не будет полезно. – FoamyGuy
Вероятно, вы должны открыть файл в режиме «rb», а не «r» в сценарии Python. B означает, что это двоичный файл. –
Я сохраняю каждый битмап на телефоне, поэтому я мог бы загрузить его как java.io.File сразу после его сохранения. Я надеялся, что мне не придется это делать. Но если у вас есть фрагмент кода, который работает, и у меня нет другого решения, я бы это сделал. Поэтому, пожалуйста, непременно, если это не хлопот, отправьте свой фрагмент :) – Bjorninn