将字节数组转换为十六进制字符串

时间:2012-07-10 04:45:29

标签: string jsp encode hex

我编写了一个简单的JSP LOGIN页面。我收到了加密格式的密码。我正在解密它。所以只是尝试我加密一个示例字符串,所以它需要将字节数组编码为十六进制字符串,我试图在我的代码的最后一个语句中做。

<%@ 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字符串的任何其他替代方法

2 个答案:

答案 0 :(得分:2)

如果Hexorg.apache.commons.codec.binary.Hex,那么您需要在JSP的顶部导入它(或者您可以org.apache.commons.codec.binary.Hex.encodeHex( encrypted ))。 java.lang.*内部肯定。谁告诉你这是不正确的。

另外,请不要把Java代码放在JSP文件中。

答案 1 :(得分:1)

在我使用JSP时,我曾经面临类似的问题。 通过下载

解决了错误
org.apache.commons.codec.binary 1.5 binary 

并将其放在lib文件夹中。然后通过以下方式访问该功能:

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

这可以解决您的问题。

干杯!