Большое спасибо за первый ответ. Здесь представлена модифицированная версия для преобразования прямоугольного изображения в квадратное (и округленное), а цвет заливки передается как параметр.
public static Bitmap getRoundedBitmap(Bitmap bitmap, int pixels, int color) {
Bitmap inpBitmap = bitmap;
int width = 0;
int height = 0;
width = inpBitmap.getWidth();
height = inpBitmap.getHeight();
if (width <= height) {
height = width;
} else {
width = height;
}
Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, width, height);
final RectF rectF = new RectF(rect);
final float roundPx = pixels;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(inpBitmap, rect, rect, paint);
return output;
}
Я не эксперт OpenSSL, но я предположил бы, что код C++ использует DES в режиме CBC, таким образом нуждающемся в IV (это - то, что, вероятно, initKey, и вот почему Вы думаете, что Вам нужны два ключа). Если я прав, необходимо изменить код Java для использования DES в режиме CBC также, то код Java также потребует ключа шифрования и IV.
Кроме того, имейте в виду, что Вы действительно не должны использовать sun.misc.* классы в Вашем коде. Это могло прервать другой VMs, поскольку это не общедоступные API. Кодеки палаты общин Apache (среди других) имеют реализации Base64, которые не переносят эту проблему.
Я не действительно уверен, почему единственный DES когда-либо использовал бы несколько ключей. Даже если бы Вы использовали тройной DES, я полагаю, что Вы использовали бы единственный ключ (с большим количеством байтов данных) вместо того, чтобы использовать отдельные ключи с Криптографией Java API.
Алгоритмы должны соответствовать; если Вы получаете различные результаты, это может иметь отношение к способу, которым Вы обрабатываете ключи и текст. Также имейте в виду, что символы Java 2 байта длиной, какие символы C++ составляют 1 байт, так, чтобы мог иметь некоторое отношение к нему.