whycxzp
2021-08-07 ffb9f0218fb586bb345fc8fa4b69325f1c555a43
uKey随机数和验证签名接口
2个文件已添加
2个文件已修改
304 ■■■■■ 已修改文件
nfdw_stand/src/com/fgkj/actions/LoginAction.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/fgkj/dao/impl/User_infImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/fgkj/dto/SignDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/softkey/jsyunew3.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/fgkj/actions/LoginAction.java
@@ -10,14 +10,10 @@
import com.fgkj.dao.BaseDAO;
import com.fgkj.dao.BaseDAOFactory;
import com.fgkj.dao.impl.User_infImpl;
import com.fgkj.db.DBUtil;
import com.fgkj.db.IDatabaseName;
import com.fgkj.dto.ServiceModel;
import com.fgkj.dto.User;
import com.fgkj.dto.UserClient;
import com.fgkj.dto.User_Chart;
import com.fgkj.dto.User_inf;
import com.fgkj.dto.User_log;
import com.fgkj.dto.*;
import com.fgkj.services.UserService;
import com.fgkj.services.User_ChartService;
import com.fgkj.services.User_battgroup_baojigroup_battgroupService;
@@ -246,6 +242,35 @@
        return SUCCESS;
    }
    /**
     * 校验签名
     * @return
     */
    public String verify(){
        ServiceModel model = new ServiceModel();
        SignDTO signDTO = ActionUtil.getGson().fromJson(json, SignDTO.class);
        //通过uKeyId获取公钥XY
        User_inf userInf = new User_infImpl().getPublicXYByUKeyId(signDTO.getUKeyId());
        //获取之前生成的随机数
        String uKeyRandom = (String) ActionUtil.getSession().getAttribute("uKeyRandom");
        com.softkey.jsyunew3 sm2=new  com.softkey.jsyunew3();
        //userInf.setUName("xxx公司");
        boolean b = sm2.YtVerfiy(userInf.getUName(), uKeyRandom, userInf.getUPubKeyX(), userInf.getUPubKeyY(), signDTO.getSign(), signDTO.getInPath());
        if(b){
            String inPath = signDTO.getInPath();
            //String userName = sm2.GetSm2UserName(inPath);
            model.setCode(1);
            //model.setData(userName);
        }else{
            model.setMsg("校验错误!");
        }
        result = ActionUtil.tojson(model);
        return SUCCESS;
    }
    public String getResult() {
        return result;
    }
nfdw_stand/src/com/fgkj/dao/impl/User_infImpl.java
@@ -790,4 +790,30 @@
            return 0;
        }
    }
    public User_inf getPublicXYByUKeyId(String uKeyId) {
        String sql = "select uname,uKey_ID,uPubKeyX,uPubKeyY from db_user.tb_user_inf where uKey_ID=? limit 1";
        List list = DAOHelper
                .executeQuery(sql, DBUtil.getConn(), new Object[]{uKeyId},
                        new CallBack() {
                            public List getResults(ResultSet rs) {
                                List list=new ArrayList();
                                try {
                                    while(rs.next()){
                                        User_inf uinf=new User_inf();
                                        uinf.setUName(rs.getString("uname"));
                                        uinf.setUKey_ID(rs.getString("uKey_ID"));
                                        uinf.setUPubKeyX(rs.getString("uPubKeyX"));
                                        uinf.setUPubKeyY(rs.getString("uPubKeyY"));
                                        list.add(uinf);
                                    }
                                } catch (SQLException e) {
                                    e.printStackTrace();
                                }
                                return list;
                            }
                        });
        return (User_inf) list.get(0);
    }
}
nfdw_stand/src/com/fgkj/dto/SignDTO.java
New file
@@ -0,0 +1,40 @@
package com.fgkj.dto;
public class SignDTO {
    private String sign;
    private String inPath;
    private String userName;
    private String uKeyId;
    public String getSign() {
        return sign;
    }
    public void setSign(String sign) {
        this.sign = sign;
    }
    public String getInPath() {
        return inPath;
    }
    public void setInPath(String inPath) {
        this.inPath = inPath;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUKeyId() {
        return uKeyId;
    }
    public void setUKeyId(String uKeyId) {
        this.uKeyId = uKeyId;
    }
}
nfdw_stand/src/com/softkey/jsyunew3.java
New file
@@ -0,0 +1,201 @@
package com.softkey;
public class jsyunew3
{
    //获到锁的版本
    public static native int GetVersion(String InPath);
    //获到锁的扩展版本
    public static native int GetVersionEx(String InPath);
    //获到锁的ID
    public static native long GetID_1(String InPath);
    public static native long GetID_2(String InPath);
    //返回最后的错误信息
    public static native long get_LastError();
    //查找加密锁
    public static native String FindPort(int start);
    //查找指定的加密锁(使用普通算法一)
    public static native String FindPort_2(int start,long in_data,long verf_data);
    //查找指定的加密锁(使用普通算法二)
    public static native String FindPort_3(int start, long in_data, long verf_data);
    //设置读密码
    public static native int SetReadPassword(String W_hkey, String W_lkey, String new_hkey, String new_lkey, String InPath);
    //设置写密码
    public static native int SetWritePassword(String W_hkey, String W_lkey, String new_hkey, String new_lkey, String InPath);
    //普通算法函数
    public static native int sWriteEx_New(int in_data, String KeyPath);
    public static native int sWrite_2Ex_New(int in_data, String KeyPath);
    public static native int sWriteEx(int InData, String InPath);
    public static native int sWrite_2Ex(int InData, String InPath);
    public static native long sRead(String InPath);
    public static native int sWrite(long InData,String InPath);
    public static native int sWrite_2(long InData,String InPath);
    //从加密锁中读取一批字节
    public static native int YReadEx(short Address, short len, String HKey, String LKey, String InPath);
    //从加密锁中读取一个字节,一般不使用
    public static native int YRead(short Address, String HKey, String LKey, String InPath);
    //从缓冲区中获得数据
    public static native short GetBuf(int pos);
    //写一批字节到加密锁中
    public static native int YWriteEx(short Address, short len, String HKey, String LKey, String InPath);
    //写一个字节到加密锁中,一般不使用
    public static native int YWrite(short inData, short Address, String HKey, String LKey, String InPath);
    //设置要写入的缓冲区的数据
    public static native int SetBuf(int pos, short Data);
    //从加密锁中读字符串-新
    public static native String NewReadString(int Address, int len, String HKey, String LKey, String InPath);
    //写字符串到加密锁中-新
    public static native int NewWriteString(String InString, int Address, String HKey, String LKey, String InPath);
    //兼容旧的读写字符串函数,不再使用
    public static native String YReadString(short Address, short len, String HKey, String LKey,String InPath);
    public static native int YWriteString(String InString, short Address, String HKey, String LKey,String InPath);
    //'设置增强算法密钥一
    public static native int SetCal_2(String Key, String InPath);
    //使用增强算法一对字符串进行加密
    public static native String EncString(String InString, String InPath);
    //使用增强算法一对二进制数据进行加密
    public static native int Cal(String InPath);
    //'设置增强算法密钥二
    public static native int SetCal_New(String Key, String InPath);
    //使用增强算法二对字符串进行加密
    public static native String EncString_New(String InString, String InPath);
    //使用增强算法二对二进制数据进行加密
    public static native int Cal_New(String InPath);
    //使用增强算法对字符串进行解密
    public static native String DecString(String InString, String Key);
    //设置要加密的缓冲区的数据
    public static native int SetEncBuf(int pos, short Data);
    //从缓冲区中获取加密后的数据
    public static native short GetEncBuf(int pos);
    //返回加密锁的公钥对
    public static native String GetPubKeyX(String InPath);
    public static native String GetPubKeyY(String InPath);
    //生成SM2密钥对,获取私钥及公钥
    public static native String get_GenPriKey();
    public static native String get_GenPubKeyX();
    public static native String get_GenPubKeyY();
    //生成SM2密钥对,产生密钥对
    public static native int StarGenKeyPair(String InPath);
    public static native String SM2_EncString(String InString,String InPath);
    public static native String SM2_DecString(String InString,String Pin,String InPath);
    public static native int shua(String OldPin,String NewPin,String InPath);
    //对消息进行签名
    public static native String YtSign(String msg,String Pin,String InPath);
    //对签名进行验证
    public static native boolean YtVerfiy(String id,String msg,String PubKeyX,String  PubKeyY,String VerfiySign,String InPath);
    //设置SM2密钥对及身份
    public static native int Set_SM2_KeyPair(String PriKey,String PubKeyX,String PubKeyY,String sm2UserName,String InPath);
    //获取加密锁中的身份
    public static native String GetSm2UserName(String InPath);
    //返回锁的硬件芯片唯一ID
    public static native String GetChipID(String InPath);
    //查找加密锁,返回的是U盘的路径,即U盘的盘符,通过这个路径也可以直接操作锁
    public static native String FindU(int start);
    //查找指定的加密锁(使得普通算法二),返回的是U盘的路径,即U盘的盘符,通过这个路径也可以直接操作锁
    public static native String FindU_3(int start,int in_data,int verf_data);
    //查找指定的加密锁(使得普通算法一),返回的是U盘的路径,即U盘的盘符,通过这个路径也可以直接操作锁
    public static native String FindU_2(int start,int in_data,int verf_data);
    //设置U盘部分为只读状态,
    public static native int SetUReadOnly(String InPath);
    //设置是否显示U盘部分盘符,真为显示,否为不显示
    public static native int SetHidOnly(boolean IsHidOnly,String InPath);
    //返回U盘部分是否为只读状态,真为只读
    public static native boolean IsUReadOnly(String InPath);
    //设置锁的ID
    public static native int SetID(String Seed, String InPath);
    //设置普通算法
    public static native int SetCal(String Old_hkey, String Old_lkey, String new_hkey, String new_lkey, String InPath);
    //获取出厂唯一编码
    public static native String GetProduceDate(String InPath);
    //***初始化加密锁函数
    public static native int ReSet(String InPath);
    //以下是代码下载及运行所需要的函数
    //查找D8加密狗
    public static native String FindD8(int pos,String VerfCode);
    //获取功能版本
    public static native int GetFuncVer(String InPath);
    //下载要运行的代码
    public static native int  DownLoadBinFile(boolean bIsEnc,String BinFile,String InPath);
    public static native int  DownLoadData(boolean bIsEnc,byte[] Buf,int BufLen,String InPath);
    public static native String  EncBinFile(String BinFile,String Key);
    //运行函数
    public static native int RunFuntion(String FunctionName,String InPath );
    public static native int ContinuRun(String InPath);
    //设置初始化变量值到锁中
    public static native int  SetVar(byte []Buf,int MemBeginPos,int BufLen,String InPath);
    //从锁中返回运行结果
    public static native byte[] GetVar(int MemBeginPos,int OutBufLen,String InPath);
    //设置下载密钥
    public static native String  SetDownLodKey(String OldKey,String NewKey,String InPath);
    public static native int  OpenKey(String VerfCode,String InPath);//下载数据时,要先打开KEY,这个函数也可以用于验证是否是自己的KEY
    public static native int  CloseKey(String InPath);//关闭KEY,用于禁止下载,要下载BIN文件到KYE时,必须要先打开
    //调用上位机API,
    public static native byte [] GetApiParam(int OutLen,String InPath);//获取要输入的参数数据
    public static native int  SetApiParam(byte []Buf,int InLen,String InPath);//设置要返回的参数数据
    //操作28K储存器
    public static native int WriteEprom(byte[]InBuf,int Addr,int len,String HKey,String LKey,String InPath);
    public static native byte [] ReadEprom(int Addr,int len,String HKey,String LKey,String InPath);
    public static native int NewSetReadPassword(String OldWriteHKey,String OldWriteLKey,String NewHKey,String NewLKey,String InPath);
    public static native int NewSetWritePassword(String OldWriteHKey,String OldWriteLKey,String NewHKey,String NewLKey,String InPath);
    //时间限制
    public static native int GetLimitYear(String InPath);
    public static native int GetLimitMonth(String InPath);
    public static native int GetLimitDay(String InPath);
    public static native int GetUserID(String InPath);
    public static native int GetLeaveNumber(String InPath);
    public static native int GetLeaveDays(String CurDate,String InPath);
    public static native int CheckBind(boolean bIsAdd,String MacAddr,String InPath);
    public static native int CheckNumber(String InPath);
    public static native int CheckDate(String InDate,String InPath);
    public static native int UpdateAuth(byte Flag,String Auth,String InPath);
    public static native int DateAuth(int CurYear,byte CurMonth,byte CurDay,
                                      int LimitYear,byte LimitMonth,byte LimitDay,int UserID,
                                      String Key,String InPath);
    public static native int NumberAuth(int Number,int UserID,String Key,String InPath);
    public static native int BindAuth(boolean bReBind,int BindCount,int UserID,String Key,String InPath);
    public static native int GetLimitBindCount(String InPath);
    public static native int GetAlreadyBindCoun(String InPath);
    public static native String MakeBindAuth(boolean bReBind, int BindCount, int UserID, String Key);
    public static native String MakeNumberAuth(int Number,int UserID,String Key);
    public static native String MakeDateAuth(int CurYear,byte CurMonth,byte CurDay,
                                             int LimitYear,byte LimitMonth,byte LimitDay,int UserID,
                                             String Key);
    public static native int CloseUsbHandle(String InPath);
    static
    {
        String DllName;
        String JdkBit=System.getProperty("sun.arch.data.model");
        if(JdkBit.equals("32"))
        {
            DllName="Jsyunew3";
        }
        else
        {
            DllName = "Jsyunew3_64";
        }
        try
        {
            System.loadLibrary(DllName);
        }
        catch (UnsatisfiedLinkError e)
        {
            System.err.println("Can//t find library:" + DllName);
            System.exit(-1);
        }
    }
}