起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 4216|回复: 33

[分享]平台外验证用户的密码

[复制链接]
发表于 2007-10-29 17:22:14 | 显示全部楼层 |阅读模式
平台上的用户密码是以加密的方式存储在组织机构属性表中
select oa.FVALUE
  from TORGSYSTEM os, TORGATTRIBUTE oa
where os.FGUID=oa.FGUID
   and os.FID='zs'
   and oa.FID='PASSWORD'

这里得到的是zs的加密以后的密码
用用户输入的密码和这里得到的密码作为参数,调用附件dll中的IsValidPassword,函数说明如下
function IsValidPassword(APass: PChar; APassEncoded: PChar): LongBool;
APass为用户输入的密码
APassEncoded为用SQL语句得到的加密后的密码

libpasschk.rar

88.84 KB, 下载次数: 394

回复

使用道具 举报

 楼主| 发表于 2007-11-1 10:12:56 | 显示全部楼层
Delphi中调用的例子:
function IsValidPassword(APass: PChar; APassEncoded: PChar): LongBool; stdcall; external 'libPassChk.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsValidPassword(PChar(Edit1.Text), PChar(Edit2.Text)) then
    showmessage('ok')
  else
    showmessage('not ok');
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-1 11:54:08 | 显示全部楼层
VC++中调用例子:
HINSTANCE hdll=LoadLibrary("libPassChk.dll");
typedef BOOLEAN (_stdcall *lpPassCheck)(LPCSTR, LPCSTR); //函数声明
lpPassCheck IsValidPassword;
IsValidPassword=(lpPassCheck)::GetProcAddress(hdll,"IsValidPassword");
BOOLEAN a;

LPCSTR s1="";
LPCSTR s2="JES:2:Base64:AES:ECBKCS5Padding:UTF-8:";
a=IsValidPassword(s1,s2 );
if(a)
{
  MessageBox("成功",0,0);
}else{
   MessageBox("失败",0,0);
}
FreeLibrary(hdll);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-30 14:51:30 | 显示全部楼层
由于WideString类型的参数无法在C#中读出,这个函数有所改变,已经修改这个帖子
参数都改成了PChar
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-30 15:00:54 | 显示全部楼层
C#调用例子:
using System.Runtime.InteropServices;

namespace test
{
    public partial class Form1 : Form
    {

         [DllImport("libPassChk.dll")]
        public static extern Boolean IsValidPasswordForCsharp(String APass, String APassEncoded);

        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (IsValidPassword(textBox1.Text, textBox2.Text))
            {
               MessageBox.Show("ok");
            }
             else{
               MessageBox.Show("not ok");
        }
        }
    }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-14 13:41:57 | 显示全部楼层
1楼动态库又有更新,可以支持从Java中调用了,如果没有用到Java,则不需要更新

Java中调用例子
CallDll.java
==================
package libPassChk;

public class CallDll {
    static {
        System.loadLibrary("libPassChk");
    }
    public native boolean IsValidPassword(String APass, String AEncodedPass);
}

调用的例子
import libPassChk.*;

public class TestCallDll {
    public static void main(String[] args) {
        CallDll jc = new CallDll();
        String j;
      
        if (jc.IsValidPassword("", "ddd")){
                System.out.println("ok");
        }else{
                System.out.println("not ok");
        }
    }
}
回复 支持 反对

使用道具 举报

发表于 2008-4-17 12:46:41 | 显示全部楼层
能不能再放一个附件上去?
下载到99.6又不能下了?
回复 支持 反对

使用道具 举报

发表于 2008-6-13 14:14:23 | 显示全部楼层
在java项目的调用中dll要放在什么目录下,有什么地方需要配置吗?
回复 支持 反对

使用道具 举报

发表于 2008-6-13 14:44:26 | 显示全部楼层
java.library.path
回复 支持 反对

使用道具 举报

发表于 2008-6-13 14:47:14 | 显示全部楼层
放到这个下面了,现在是dll找到了,但是好象是方法找不到!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 19:18 , Processed in 0.045502 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表