Base64 Android to String and get Hash md5
есть bitmap который через этот метод
public static String convert(Bitmap bitmap)
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
return Base64.encodeToString(outputStream.toByteArray(), Base64.URL_SAFE );
}
должен вернуть base64 и сунуть его в json, потом из base64 получить md5 и снова положить в json, основной код:
String fileName = selectedImage.getLastPathSegment();
String base64 = ImageUtil.convert(bitmap);
String hash = ImageUtil.md5(base64);
Log.e(TAG, fileName);
Log.e(TAG, base64);
Log.e(TAG, hash);
UserImage userImage = new UserImage(fileName, base64, hash);
метод получения md5
public static String md5(String s) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
return hexString.toString();
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
ответ от сервера:
Hash validation error. Expected: ab6d68e277fbd8a7621fbd7ca8d168, actual: 8dbfc0c5479f862387e0327f19837deb{json...
Ответы (1 шт):
Автор решения: woesss
→ Ссылка
Скорее всего сервер хочет хеш оригинального изображения, а не закодированного в Base64.
Тогда сделаем так:
ImageUtil:
public static byte[] compress(Bitmap bitmap) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
return outputStream.toByteArray();
}
public static String convert(byte[] imageBytes) {
return Base64.encodeToString(imageBytes, Base64.URL_SAFE );
}
public static String md5(byte[] srcBytes) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(srcBytes);
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++) {
String hb = Integer.toHexString(0xFF & messageDigest[i]);
if (hb.length() == 1) {
hexString.append('0');
}
hexString.append(hb);
}
return hexString.toString();
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
Используем:
String fileName = selectedImage.getLastPathSegment();
byte[] imageBytes = ImageUtil.compress(bitmap);
String base64 = ImageUtil.convert(imageBytes);
String hash = ImageUtil.md5(imageBytes);
Log.e(TAG, fileName);
Log.e(TAG, base64);
Log.e(TAG, hash);
UserImage userImage = new UserImage(fileName, base64, hash);
P.S. за правильность формирования строки md5 не ручаюсь - мог ошибиться