Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024

Из JS в Java

29.11.2017, 10:18. Показов 807. Ответов 4

Студворк — интернет-сервис помощи студентам
Доброго утра, форумчане.
Проблема такая, необходимо декодировать из Base64 в Hex( например, AAAAAAAAnH0= -> 0000000000009C7D,AAAAAAAAALQ= -> 00000000000000B4) в доке написано, что с этим справляется этот сайт.
Функции декодирования там лежат в открытом виде:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<script type="text/javascript">
<!--
    var hD='0123456789ABCDEF';
    function dec2hex(d) {
        var h = hD.substr(d&15,1);
        while (d>15) {
            d>>=4;
            h=hD.substr(d&15,1)+h;
        }
        if (document.frmConvert.chbLowercaseOutput.checked) {
            h = h.toLowerCase();
        }
        return h;
    }
 
    var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
    function base64_decode(input) {
        var output = new Array();
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;
 
        var orig_input = input;
        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
        if (orig_input != input)
            alert ("Warning! Characters outside Base64 range in input string ignored.");
        if (input.length % 4) {
            alert ("Error: Input length is not a multiple of 4 bytes.");
            return "";
        }
        
        var j=0;
        while (i < input.length) {
 
            enc1 = keyStr.indexOf(input.charAt(i++));
            enc2 = keyStr.indexOf(input.charAt(i++));
            enc3 = keyStr.indexOf(input.charAt(i++));
            enc4 = keyStr.indexOf(input.charAt(i++));
 
            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
            
            output[j++] = chr1;
            if (enc3 != 64)
              output[j++] = chr2;
            if (enc4 != 64)
              output[j++] = chr3;
              
        }
        return output;
    }
    
   
    function ShowDecodedAsText(val)
    {
        var target = document.getElementById('divDecodedText'); 
        target.innerHTML = val;    
    }     
    
    function Convert() {
        var output = base64_decode(document.frmConvert.encoded.value);
        var separator = "";
        if (document.frmConvert.chbSeparator.checked)
            separator = " 0x";
        var hexText = "";
        var htmlStr = "<p style=\"font-family: courier new, monospace\"><b>";
        for (i=0; i<output.length; i++) {
          hexText = hexText + separator + (output[i]<16?"0":"") + dec2hex(output[i]);
          if (output[i] >= 32 && output[i] <= 126)
          {
            switch(String.fromCharCode(output[i])) {
            case '&': htmlStr += "&amp;";
              break;
            case '<': htmlStr += "&lt;";
              break;
            case '>': htmlStr += "&gt;";
              break;
            case '"': htmlStr += "&quot;";
              break;
            case '\'': htmlStr += "'";
              break;
            default: htmlStr += String.fromCharCode(output[i]);
            }          
          }
          else {
            htmlStr += "<i>[" + output[i] + "]<" + "/i>";
          }
        }
        htmlStr += "<" + "/b><" + "/p>";  // stupid W3C validator...
        document.frmConvert.hex.value = hexText;
                
        ShowDecodedAsText(htmlStr);   
    }
    
    function ConvertToFile() {
      Convert();
      createFileFromHex(document.frmConvert.hex.value, document.frmConvert.filename.value);
    } 
 
//-->
</script>
Мне нужно реализовать все на Java и я написал класс:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public class TomaszDecoder {
 
    private  final String hD="0123456789ABCDEF";
    private  final String keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 
    private final int HEX_COUNT = 15;
    private String dec2hex(int d) {
 
        String h = substr(d & HEX_COUNT);
        while (d>15) {
            d>>=4;
            h = substr(d & HEX_COUNT)+h;
        }
 
        return h;
    }
 
    private String substr(int start) {
        if (start < 0)
            start = HEX_COUNT + start;
        return hD.substring(start,start+1);
    }
 
 
    private String base64_decode(String input) {
        StringBuilder output = new StringBuilder();
        int chr1, chr2, chr3;
        int enc1, enc2, enc3, enc4;
        int i = 0;
 
       /* var orig_input = input;
        replace(input,'/[^A-Za-z0-9\+\/\=]/g', "");
        if (input.length % 4) {
            status = "Error: Input length is not a multiple of 4 bytes";
            return [output, status];
        }*/
 
        int j=0;
        while (i < input.length()) {
 
            enc1 = keyStr.indexOf(input.charAt(i++));
            enc2 = keyStr.indexOf(input.charAt(i++));
            enc3 = keyStr.indexOf(input.charAt(i++));
            enc4 = keyStr.indexOf(input.charAt(i++));
 
            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
 
            output.append(chr1);
            if (enc3 != 64)
                output.append(chr2);
            if (enc4 != 64)
                output.append(chr3);
 
        }
       /* var status;
        if (orig_input != input) {
            status = "Warning! Characters outside Base64 range in input string ignored.";
        } else {
            status = "";
        }*/
        return output.toString();
    }
 
    public String convertFromBase64(String base64String) {
        StringBuilder hexText =  new StringBuilder();
        String separator = "";
        /*if (document.frmConvert.chbSeparator.checked)
            separator = " 0x";*/
       // var lines = document.frmConvert.encoded.value.split('\n');
 
         char[] output = base64_decode(base64String).toCharArray();
            for (int j=0; j<output.length; j++) {
                hexText.append(separator + (output[j]<16?"0":"") + dec2hex(output[j]));
            }
 
            return hexText.toString();
 
    }
}
Но он выдает другой результат, очень надеюсь на вашу помощь в решении проблемы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2017, 10:18
Ответы с готовыми решениями:

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position at java.desktop/java.awt.Cont
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class...

Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ?
Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ? Ответье, плиз, новичку, по MSDN я не понятно, это исключительно...

Ошибка reference to List is ambiguous; both interface java.util.List in package java.util and class java.awt.List in...
Почему кгда я загружаю пакеты awt, utill вместе в одной проге при обьявлении елемента List я ловлю такую ошибку. 'listTest.java':...

4
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
29.11.2017, 11:00
точнее цель опиши, что должно конвертироваться в hex?
0
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
29.11.2017, 13:50  [ТС]
input - AAAAAAAAALQ=, output - 30303030303030313830 (correct - 00000000000000B4)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
29.11.2017, 15:39
ну это, конечно, полностью проясняет вообще все, что ты хочешь
во-первых, я бы на твоем месте посмотрел сюда java.util.Base64
во-вторых, какой смысл раскодировать base64 в строку?
0
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
01.12.2017, 14:19  [ТС]
Решил проблему использовав библиотеку rhino

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  private void runScript(String javaScriptCode,String functionNameInJavaScriptCode,Object[] params) {
        org.mozilla.javascript.Context rhino = org.mozilla.javascript.Context.enter();
        rhino.setOptimizationLevel(-1);
        try {
            Scriptable scope = rhino.initStandardObjects();
            
            rhino.evaluateString(scope,javaScriptCode , "JavaScript", 1, null);
 
            // Get the functionName defined in JavaScriptCode
            Object obj = scope.get(functionNameInJavaScriptCode, scope);
 
            if (obj instanceof org.mozilla.javascript.Function) {
                org.mozilla.javascript.Function jsFunc = (org.mozilla.javascript.Function) obj;
 
 
                // Call the function with params
                Object jsResult =
                        jsFunc.call(rhino, scope, scope, params);
                // Parse the jsResult object to a String
                String result = org.mozilla.javascript.Context.toString(jsResult);
                Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        finally {
            org.mozilla.javascript.Context.exit();
        }
 
    }
Вызов метода такой:

Java
1
2
3
    
String script = readTextFromAssetsFile("tomasz.js");
 runScript(script,"convert",new Object[]{"AAAAAAAAnH0="});
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2017, 14:19
Помогаю со студенческими работами здесь

Что оптимальнее для почтового сервиса - java.IO или java.NIO?
Пишу серверную часть мобильного приложения под Android на JDK, в которое будет интегрирован почтовый сервис, подгрузка новостей, личный...

При работе JVM обвалвается java c кодом Java Result 1073807364.
При работе JVM обвалвается java c кодом Java Result 1073807364. Если кто-нибудь знает, помогите пожалуйста.

Error:(10, 42) java: incompatible types: int cannot be converted to java.math.BigDecimal
import java.math.*; import java.util.Scanner; public class Factorial { public static void main(String args) { Scanner...

Java.lang.IllegalArgumentException в нативных функциях (embedded Java, MicroEJ, STM32F4Discovery)
Добрый день! Пытаюсь связать embedded Java и C посредством нативных функций. Идея в следующем: мне нужно вернуть из нативной...

Посоветуйте примеры кода по Java. Теория прочтена, но с языком Java не знакома
Или может кто может дать готовый код. В теории вроде бы не очень сложно. :cry: 1.Напишите процедуру, которая по заданному сообщению...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru