我是Oracle和JSP的新手。作为我的任务的一部分,我尝试在JSP中创建一个登录页面。所以我已将它连接到数据库,并且我拥有所有用户名和密码。但passowrd是加密格式..我的主管告诉我,它在dbms_obfuscation_toolkit.DESEncrypt中加密......我必须将该密码解密为原始,以便我可以在登录页面上使用提供的密码对其进行检查..我在JSP中使用此代码:JSP代码解密dbms_obfuscation_toolkit.DESEncrypt oracle
<%@ 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>
我有最后一行where语句是问题:byte[] encrypted = cipher.doFinal(bytes);
这种说法给我一个错误:
javax.crypto.IllegalBlockSizeException:输入长度不是多个在的com.sun 8个字节。 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)在com.orionserver上的_check1._jspService上的javax.crypto.Cipher.doFinal(DashoA6275)(_check1.java:83)[com.orionserver上的SRC:/check1.jsp:45] [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)at 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.eve rmind [适用于J2EE的Oracle应用服务器容器10g(10.1.2.0.2)]。server.http.HttpRequestHandler.run(HttpRequestHandler.java:285)at com.evermind [适用于J2EE的Oracle应用服务器容器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.ReleasableResourcePooledExecutor $ MyWorker.run(ReleasableResourcePooledExecutor.java: 186)在java.lang.Thread.run(Thread.java:534)
我知道错误意味着参数需要8个字节的倍数。但我应该怎么做?请任何人都可以纠正我的代码或给我一些其他的例子。我是JSP和ORACLE的新手,所以都不太了解。提前致谢! :)
您需要更多信息。您指出的Oracle方法不适用任何填充,并且适用于各种加密/解密模式,例如, DES和三重DES(或正式的TDEA)。它似乎执行CBC模式,但我不知道你应该从哪里检索IV。向你的主管询问更多信息。 – 2012-07-09 12:12:18