用于解密dbms_function_toolkit的JSP代码.DESEncrypt oracle



我是Oracle和JSP的新手。。作为我任务的一部分,我尝试在JSP中创建一个登录页面。所以我已经把它连接到数据库,我有所有的用户名和密码。但是passowrd是加密格式的。。我的主管告诉我,它是在dbms_function_toolkit.DESECrypt中加密的……我必须将密码解密为原始密码,这样我才能在登录页面上使用提供的密码进行检查。。我在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.cypto.properment.SunJCE_h.a(DashoA6275)的com.sun.crypto.properment.SunJCE_h.b(DashoA6 275)的com.ibm.sun.cryto.properator.SenJCE_h.b(DashoA 275)的java.sun.crytocrypto.proprovider.DESCipher.engineDoFinal(DashoA7275)的_check1._jspService(_check1.java:83)处输入长度不是8字节的倍数[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位于com.evermind[Oracle Application Server Containers for J2EE 10g(10.1.2.0.2)].Server.http.ServletRequestDispatcher.invoke(ServletRequestDisptcher.java:824)的javax.servlet.HttpServlet.service(HttpServlet.java:853)com.evermind[Oracle Application Server Containers for J2EE 10g(10.1.2.0.2)].Server.HttpRequestHandler.processRequest(HttpRequestHandler.java:830)at com.evermind[Oracle Application-Server Containers for J2EE10g在com.evermind[Oracle Application server Containers for J2EE 10g(10.1.2.0.2)].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleaseableResourcePooledexecutor.java:186)在java.lang.Thread.run(Thread.java:534)

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

请更换

String str="test1234abc"; 

String str="12345abc";  

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

最新更新