Пытаюсь реализовать base64 "на коленке". Просто для практики (про существование готового решения я знаю). Шифрование: Code: public void actionPerformed(ActionEvent e) { status.setText("Идёт обработка..."); try { int size; InputStream is = new FileInputStream(inpFile.getText()); size = is.available(); int ost = size%3; if(ost == 1) { size += 2; }else if(ost == 2) { size += 1; } int bnSize = (size/3)*4; byte[] b = new byte[size]; byte[] bn = new byte[bnSize]; is.read(b); is.close(); int j = 0; for(int i = 0;i<size;i+=3) { bn[j] = (byte) ((b[i] & 0xfc) >> 2); bn[j+1] = (byte) (((b[i] & 0x03) << 4) + ((b[i+1] & 0xf0) >> 4)); bn[j+2] = (byte) (((b[i+1] & 0x0f) << 2) + ((b[i+2] & 0xc0) >> 6)); bn[j+3] = (byte) (b[i+2] & 0x3f); j+=4; } String res = new String(""); for(int i = 0;i < bnSize;i++) { res += b64_k.charAt(bn[i]); } if(ost == 1) { res = res.substring(0,res.length() - 2) + "=="; }else if(ost == 2) { res = res.substring(0,res.length() - 1) + "="; } OutputStream os = new FileOutputStream(outFile.getText()); os.write(res.getBytes()); os.close(); status.setText("Обработка завершена. Программа готова."); }catch(Exception ex) { status.setText("Обработка завершена с ошибкой " + ex.getMessage() + ". Программа готова."); } } Расшифровка: Code: public void actionPerformed(ActionEvent e) { status.setText("Идёт обработка..."); try { int size; InputStream is = new FileInputStream(inpFile.getText()); size = is.available(); byte[] b = new byte[size]; is.read(b); is.close(); int bnSize = (size/4)*3; byte[] bn = new byte[bnSize]; int j = 0; for(int i = 0;i < size;i+=4) { bn[j] = (byte) ((b[i] << 2) + ((b[i+1] & 0x03) >> 4)); bn[j+1] = (byte) (((b[i+1] & 0xf) << 4) + ((b[i+2] & 0x3c) >> 2)); bn[j+2] = (byte) (((b[i+2] & 0x3) << 6) + b[i+3]); j+=3; } System.out.println(new String(bn)); status.setText("Обработка завершена. Программа готова."); }catch(Exception ex) { status.setText("Обработка завершена с ошибкой " + ex.getMessage() + ". Программа готова."); } } Проблема в том, что зашифровывает отлично, а расшифровывает не корректно (возвращает муть). 2 дня разбираюсь, не могу понять в чём проблема. Если кто разбирается в алгоритмизации, буду благодарен. Просто заклинило =)
Конечно. Это разве имеет принципиальное значение? в этом алгоритме работа идёт с битами числа. знак это 1 или 0 в знаковом бите числа. или я не прав?