首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于解密dbms_obfuscation_toolkit.DESEncrypt oracle的JSP代码

用于解密dbms_obfuscation_toolkit.DESEncrypt oracle的JSP代码
EN

Stack Overflow用户
提问于 2012-07-09 18:38:50
回答 2查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
<%@ 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 );这条语句给我一个错误:

检查:在com.sun.crypto.provider.SunJCE_h.a(DashoA6275) at com.sun.crypto.provider.SunJCE_h.b(DashoA6275) at com.sun.crypto.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 at输入长度不是8字节的倍数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) at com.evermindOracle用于J2EE 10g的com.orionserverOracle应用服务器容器适用于J2EE 10g的com.evermindOracle应用服务器容器(10.1.2.0.2).server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:824)在J2EE 10g (10.1.2.0.2).server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:330)的com.evermindOracle应用服务器容器J2EE 10g com.evermindOracle应用服务器容器J2EE 10g (10.1.2.0.2).server.http.HttpRequestHandler。在适用于(10.1.2.0.2).server.http.HttpRequestHandler.run(HttpRequestHandler.java:126) 10g (10.1.2.0.2).util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186)的com.evermindOracle应用程序服务器容器运行( com.evermindOracle )适用于java.lang.Thread.run的J2EE 10g com.evermindOracle应用服务器容器(Thread.java:534)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-09 21:30:53

敬请更换

代码语言:javascript
复制
String str="test1234abc"; 

代码语言:javascript
复制
String str="12345abc";  
票数 1
EN

Stack Overflow用户

发布于 2012-07-10 10:54:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11393397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档