JSP代码dbms模糊处理工具包.DESEncrypt DECRYPT Oracle

JSP代码dbms模糊处理工具包.DESEncrypt DECRYPT Oracle,oracle,jsp,encryption,obfuscation,Oracle,Jsp,Encryption,Obfuscation,我正在解密oracle数据库中的密码,用于登录页面,以验证用户名和密码。这是一个简单的JSP页面: <HTML> <BODY> <% Class.forName("oracle.jdbc.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@xxx:xxxx:xxxx","i----r","i-----r");

我正在解密oracle数据库中的密码,用于登录页面,以验证用户名和密码。这是一个简单的JSP页面:

<HTML>
<BODY>

<%
    Class.forName("oracle.jdbc.OracleDriver");

        Connection conn =     DriverManager.getConnection("jdbc:oracle:thin:@xxx:xxxx:xxxx","i----r","i-----r");
                        // @//machineName:port:SID,   userid,  password

    Statement st=conn.createStatement();

    ResultSet rs=st.executeQuery("Select * from xxxxxxx");

    //Just testing now, for decryption

    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>

是什么原因导致了这种情况,我如何解决它?

错误消息有一次很有用:将输入字符串填充到8字节的倍数

使用或用于早期版本:

byte[] bytes=str.getBytes("UTF-8");

byte[] bytesPadded = 
   (str
    + new String(new byte[(8  - bytes.length % 8) % 8])
   ).getBytes();

byte[] encrypted = cipher.doFinal( bytesPadded );

好的,我得到了我的问题的答案。。。我使用的是8字节加密。因此,密码必须是8个字符的倍数。因此,通过在登录页面上检查密码必须是8个字符的倍数,问题就迎刃而解了。

但是如何解决呢??我尝试了很多方法。但不起作用。如果您能给我一些指导,我会很有帮助,因为我对ORACLE和JSP都是新手。您的字符串在UTF-8中有11个字符长,11个字节长。但根据当前设置,它需要是8字节的倍数。这些问题与ORACLE或JSP无关。这是关于安全技术的基础知识和正确使用。不要只是在不了解代码的详细功能的情况下更改代码。您只需创建一个不安全的应用程序,该应用程序迟早会被黑客攻击。但整个应用程序是由该公司以前创建的,我只需运行查询以检查数据库中已存储的密码。。使用登录页面上提供的密码。总之,我不能更改应用程序或加密或其他任何内容。我只需要对它进行解密来检查密码。对于密码验证,我强烈建议不要使用加密/解密。相反,使用加密哈希函数和足够长的salt。然后比较散列值来验证密码。我没有使用这个方法,我工作的公司正在使用它。我只需要开发一个jsp页面,它允许我通过从这个已经存储了密码的数据库获取密码来登录。然后此jsp页面将重定向到Oracle表单。你能更正这个代码吗?如果系统已经存在,那么你需要从创建它的人那里获得更多信息。DES要求数据大小为8字节的倍数。因此,如果加密没有进行任何填充,那么您需要了解现有系统是如何产生8字节的倍数的。此外,确保在创建密钥、加密密码、初始化向量以及将基于字符的数据转换为二进制数据(真的是UTF-8吗?)时使用完全相同的参数。好的,我得到了查询的答案。。。我使用的是8字节加密。因此,密码必须是8个字符的倍数。因此,通过在登录页面上检查密码必须是8个字符的倍数,问题就解决了。顺便问一下,我的主管要求我给出一些建议,如何改进这一点。因为我们正在使用Oracle Application server。所有用于登录的用户名和密码都保存在Oracle数据库的特定表中。那么我们应该使用哪种加密?不要使用加密。使用(加密性强)散列,如SHA-1。别忘了盐。
byte[] bytes=str.getBytes("UTF-8");

byte[] bytesPadded = 
   (str
    + new String(new byte[(8  - bytes.length % 8) % 8])
   ).getBytes();

byte[] encrypted = cipher.doFinal( bytesPadded );