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のcom.sun.crypto.provider.SunJCE_h.b(DashoA6275)のcom.sun.crypto.provider.SunJCE_h.a(DashoA6275)で入力長が8バイトの倍数ではありません。 _check1._jspService(_check1.java:83)[SRC:/ check1 .jsp:45] at com.orionserver [Oracle Application Server Containers for J2EE 10g(10.1.2.0.2)]。http.OrionHttpJspPage.service(OrionHttpJspPage.java:56)at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable .java:350)at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:509)at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:413)at 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)at 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)at com.evermind [Oracle Application Server Containers for J2EE 10g(10.1.2.0.2)]。util。Java.lang.Thread.run(Thread.java:534)のReleasableResourcePooledExecutor $ MyWorker.run(ReleasableResourcePooledExecutor.java:186)

エラーは、パラメータに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 に答える