0

我是 Oracle 和 JSP 的新手。作为我任务的一部分,我尝试在 JSP 中创建一个登录页面。所以我已将它连接到数据库,并且我拥有所有用户名和密码。但是 passowrd 是加密格式.. 我的主管告诉我它在 dbms_obfuscation_toolkit.DESEncrypt 中加密...我必须将该密码解密为原始密码,以便我可以使用登录页面上提供的密码检查它.. 我在 JSP 中使用此代码:

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

<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","ixxxer","ixxxer");
                        // @//machineName:port:SID,   userid,  password

    Statement st=conn.createStatement();

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

    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( ), algorithm1 );
    cipher = Cipher.getInstance( algorithm2 );

    String str="test1234abc";

    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 );

    }
%>  
</BODY>
</HTML>

我对语句的最后一行有问题:byte[] encrypted = cipher.doFinal( bytes );该语句给了我一个错误:

javax.crypto.IllegalBlockSizeException:com.sun.crypto.provider.SunJCE_h.a(DashoA6275) 的 com.sun.crypto.provider.SunJCE_h.b(DashoA6275) 的输入长度不是 8 个字节的倍数。 provider.SunJCE_h.b(DashoA6275) at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA6275) at javax.crypto.Cipher.doFinal(DashoA6275) at _check1._jspService(_check1.java:83) [SRC:/check1 .jsp:45] 在 com.orionserver[Oracle Application Server Containers for J2EE 10g (10.1.2.0.2)].http.OrionHttpJspPage.service(OrionHttpJspPage.java:56) 在 oracle.jsp.runtimev2.JspPageTable.service(JspPageTable .java:350) 在 oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:509) 在 oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:413) 在 javax.servlet.http.HttpServlet.service( HttpServlet.java:853)在 com。evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.0.2)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:824) at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.0.2) )].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:330) 在 com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.0.2)].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java: 830) at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.0.2)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:285) at com.evermind[Oracle Application Server Containers for J2EE 10g ( 10.1.2.0.2)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:126) 在 com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.0.2)].util。ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186) 在 java.lang.Thread.run(Thread.java:534)

我知道错误意味着参数需要 8 个字节的倍数。但我该怎么办?请任何人都可以更正我的代码或给我一些其他的例子。我是 JSP 和 ORACLE 的新手,所以不太了解。提前致谢!:)

4

2 回答 2

1

请更换

String str="test1234abc"; 

String str="12345abc";  
于 2012-07-09T13:30:53.490 回答
0

好的,我得到了查询的答案...... psaraj12 提到了同样的事情。但只是为了让所有人都清楚它背后的原因是什么,我使用的是 8 字节加密。所以密码必须是 8 个字符的倍数。因此,通过在登录页面上检查密码必须是 8 个字符的倍数来解决问题。

于 2012-07-10T02:54:57.477 回答