Преобразовать массив байтов в десятичную строку гекса

Я написал простую страницу входа в систему JSP. Я получил пароль в зашифрованном виде. Я расшифровываю это. Так что просто для того, чтобы попробовать, я шифрую образец строки, поэтому он должен затем закодировать байтовый массив в шестнадцатеричную строку, что я пытаюсь сделать в последнем утверждении моего кода.

<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.security.*" %>
<%@ page import="javax.crypto.*" %>
<%@ page import="javax.crypto.spec.*" %>
<%@ page import="java.lang.*" %>

<HTML>
<HEAD>
<TITLE>Simple JSP/Oracle Query Example</TITLE>
</HEAD>
<BODY>

<%
   Class.forName("oracle.jdbc.OracleDriver");

   Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@xxx:xxxx:xxxx","xxxxxx","xxxxxx");
                        // @//machineName:port:SID,   userid,  password

    Statement st=conn.createStatement();

    ResultSet rs=st.executeQuery("Select * from Cxxxxxxx");

    while(rs.next()){
        String name=rs.getString("user_id");
        String p=rs.getString("password");
        out.println(name+":"+p);
        out.println("</br>");


    String algorithm1 = "DES";//magical mystery constant
    String algorithm2 = "DES/CBC/NoPadding";//magical mystery constant
    IvParameterSpec iv = new IvParameterSpec( new byte [] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } );//magical mystery constant
    Cipher cipher;
    SecretKey key;
    String k="12345abc";
    key = new SecretKeySpec( k.getBytes("UTF-8"), algorithm1 );
    cipher = Cipher.getInstance( algorithm2 );

    String str="test4abc";

    cipher.init( Cipher.ENCRYPT_MODE, key, iv ); //normally you could leave out the IvParameterSpec argument, but not with Oracle

    byte[] bytes=str.getBytes("UTF-8");

    byte[] encrypted = cipher.doFinal( bytes );

    //Problem is in the statement BELOW --->
    String encoded = new String( Hex.encodeHex( encrypted ) );
    }
%>  
</BODY>
</HTML>

Я получаю сообщение об ошибке:

[jsp src:line #:48]
cannot resolve symbol symbol : variable Hex location: class _check1 String encoded = new String( Hex.encodeHex( encrypted ) ); 

Как мне выполнить этот оператор или любую другую альтернативу для кодирования ByteArray в HexaDecimal String

2 ответа

Решение

Я столкнулся с подобной проблемой некоторое время назад, когда я работал с JSP. Ошибка была решена загрузкой

org.apache.commons.codec.binary 1.5 binary 

и поместив его в папку lib. Затем доступ к этой функции с помощью:

org.apache.commons.codec.binary.Hex.encodeHex( encrypted ))

Это должно решить вашу проблему.

Ура!

Если Hex должен быть org.apache.commons.codec.binary.Hex Затем вам нужно импортировать его как таковой в верхней части вашего JSP (или поочередно вы можете сделать org.apache.commons.codec.binary.Hex.encodeHex( encrypted )). Это определенно не внутри java.lang.*, Тот, кто сказал тебе, что это неправильно.

Также, пожалуйста, пожалуйста, пожалуйста, не помещайте Java-код в файлы JSP.

Другие вопросы по тегам