Код JSP для расшифровки dbms_obfuscation_toolkit.DESEncrypt оракула

Я новичок в Oracle и JSP. В рамках моего задания я пытаюсь создать страницу входа в JSP. поэтому я подключил его к базе данных, и у меня есть все имя пользователя и пароль. но пароль находится в зашифрованном формате. Мой руководитель сказал мне, что он зашифрован в 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: Длина ввода не кратна 8 байтам в com.sun.crypto.provider.SunJCE_h.a(DashoA6275) в com.sun.crypto.provider.SunJCE_h.b(DashoA6275) в com.sun.crypto. provider.SunJCE_h.b(DashoA6275) в com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA6275) в javax.crypto.Cipher.doFinal(DashoA6275) в _check1._jspService(_check1.java:83) [SRC:/check1 .jsp:45] на com.orionserver[Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.0.2)]. .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 для J2EE 10g (10.1.2.0.2)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:824) на com.evermind[Oracle A Контейнеры сервера приложений для J2EE 10g (10.1.2.0.2)].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:330) на com.evermind[Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.0.2)]. server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:830) на com.evermind[Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.0.2)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:285) на com.evermind[Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.0.2)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:126) на com.evermind[Контейнеры сервера приложений Oracle для J2EE 10g (10.1.2.0) .2)].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186) на java.lang.Thread.run(Thread.java:534)

Я знаю, что ошибка означает, что для параметра требуется кратное 8 байтам. но как мне поступить? Пожалуйста, может кто-нибудь исправить мой код или дать мне другой пример. Я новичок в JSP и ORACLE, поэтому многого не знаю. Заранее спасибо! :)


person Murtaza    schedule 09.07.2012    source источник
comment
Вам нужно больше информации. Указанный вами метод Oracle не применяет никаких дополнений и подходит для различных режимов шифрования/дешифрования, например. DES и Triple DES (или официально TDEA). Хотя, похоже, он работает в режиме CBC, но я не знаю, откуда вы должны получить IV. За дополнительной информацией обращайтесь к своему руководителю.   -  person Maarten Bodewes    schedule 09.07.2012


Ответы (2)


Пожалуйста, замените

String str="test1234abc"; 

to

String str="12345abc";  
person psaraj12    schedule 09.07.2012

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

person Murtaza    schedule 10.07.2012
comment
это ограничение упоминается в документации oracle для dbms_obfuscation_toolkit docs. oracle.com/cd/B28359_01/appdev.111/b28419/d_obtool.htm - person psaraj12; 10.07.2012