JSP (Java): кодирование байтового массива и использование в JavaScript то же самое в C # - PullRequest
0 голосов
/ 29 апреля 2018

Я использую этот код в C # .net для отправки запроса на веб-страницу.

        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        Byte[] rnd = new Byte[64];
        rng.GetBytes(rnd);
        hidChallenge.Value = Encoding.Unicode.GetString(rnd);

А я в java script его использую.

var base64str = document.getElementById("<%=hidChallenge.ClientID %>");

При запуске и отладке:

base64str =  感≗좦短䗅燛梻脕冔춇噙풣訋詇蹘᧩쾏휇᯸늸䫐顨◣希ࠟ䠎ᐷ

Но в Java (JSP)

Я использую этот код:

Random r = new Random();
byte[] rndbyte = new byte[64];
r.nextBytes(rndbyte);
String challenge = new String(rndbyte,StandardCharsets.UTF_16LE);                    
session.setAttribute("challenge", challenge);

И в JavaScript:

var base64str = 101  ꦖ 쁳 春 꼪 䣇 䣇 鱐 䆺 ᠁ 郷 ̣ 攺 줶 ꋏ 歮 㬎 ꢔ ꢔ 101

Я также пытаюсь следовать кодировке:

US_ASCII

UTF_8

UTF_16

Итак, я получаю ошибку строки 64.

1 Ответ

0 голосов
/ 30 апреля 2018

похоже, что существует путаница между тем, для чего нужны UTF-8/16 или Ascii, и Base64.

UTF-8 предназначен для кодирования строки в последовательность байтов. А Base64 предназначен для кодирования последовательности байтов в строку.

Если вы хотите сгенерировать base64 в Java, вот как это должно выглядеть:

Random r = new Random();
byte[] rndbyte = new byte[64];
r.nextBytes(rndbyte);
String challenge = Base64.encodeBase64String(rndbyte);                    
session.setAttribute("challenge", challenge);

Вот еще один пост, который объясняет довольно хорошую разницу, если вы хотите узнать больше об этом: В чем разница между UTF8 / UTF16 и Base64 с точки зрения кодирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...