坚石诚信ETz201应用于ASP.NET项目中

48 篇文章 0 订阅
7 篇文章 0 订阅

认证思路:

1.用户登录时输入口令或登录后在特定权限要求下弹窗输入口令。

2.根据用户名从数据库中查询对应的令牌信息,获得上一次认证时回写的内容,验证本次口令有效性。


操作方法:

1.数据库中用户表增加字段“令牌序列号”,记录打印在令牌上的产品序号。

2.数据库中增加新表,记录令牌信息,字段包含令牌序列号、密钥、成功值、漂移值等。其中令牌序列号关联用户表中对应的字段。需提前将令牌的序列号和秘钥录入数据库,成功值和漂移值初始化0。

3.将ET_OTPVerify.dll复制到项目bin目录下。

4.以非托管方式调用ET_OTPVerify.dll,认证页面增加以下代码:
        [DllImport("ET_OTPVerify.dll")]
        public static extern int ET_CheckPwdz201(string authkey, UInt64 t, UInt64 t0, uint x, int drift, int authwnd, UInt64 lastsucc, string otp, int otplen, ref UInt64 currsucc, ref int currdft);
        [DllImport("ET_OTPVerify.dll")]
      public static extern int ET_Syncz201(string authkey, UInt64 t, UInt64 t0, uint x, int drift, int syncwnd, UInt64 lastsucc, string otp1, int otp1len, string otp2, int otp2len, ref UInt64 currsucc, ref int currdft);

/* =============================================================================
 * Function   : ET_CheckPwdz201
 * Description: OTP Z201(TOTP) 认证接口
 * Parameter  : 
 * authkey 令牌密钥(令牌提供商提供) //应存入数据库中,使用时select
 *      t               当前时间相对UTC Epoch秒数
 *      t0              起始参考时间相对UTC Epoch秒数(默认为0)
 *      x               TOTP变化周期(默认为60秒)
 *      drift           漂移值(用于时间校准)  //数据库中取,第一次给0.
 *      authwnd    认证范围, 通常是0-20
 *      lastsucc        前一次认证成功的相对UTC Epoch秒数(为防止重放攻击) //数据库中取,第一次给0.
 *      otp 需要认证的动态口令
 *      otplen 需要认证的动态口令长度, 通常是6
 *      currsucc 认证成功后的相对UTC Epoch秒数  //认证成功后应写入数据库,供下次调用。
 *      currdft         认证成功后的当前漂移次数       //认证成功后应写入数据库,供下次调用。
 *
 * return     : 0 - 成功, 其他值为错误.
 *
 *int __stdcall ET_CheckPwdz201(char *authkey, uint64_t t, uint64_t t0, 
 *   unsigned int x, int drift, int authwnd, uint64_t lastsucc, 
 *   const char *otp, int otplen, uint64_t *currsucc, int *currdft);
=============================================================================
 * Function   : ET_Syncz201
 * Description: OTP Z201(TOTP) 同步接口
 * Parameter  : 
 * authkey 令牌密钥,已经加密过的,需要对其进行解密
 *      t               当前时间相对UTC Epoch秒数
 *      t0              起始参考时间相对UTC Epoch秒数(默认为0)
 *      x               TOTP变化周期(默认为60秒)
 *      drift           漂移值
 *      syncwnd         同步范围, 通常是0-40
 *      lastsucc        前一次认证成功的相对UTC Epoch秒数(为防止重放攻击)
 *      otp1            需要同步的第一个动态口令
 *      otp1len 需要同步的第一个动态口令长度, 通常是6
 *      otp2            需要同步的第二个动态口令
 *      otp2len         需要同步的第二个动态口令长度, 通常是6   
 *      currsucc 认证成功后的相对UTC Epoch秒数   //同步成功后应写入数据库,供下次调用。
 *      currdft         认证成功后的当前漂移次数        //同步成功后应写入数据库,供下次调用。
 *
 * return     : 0 - 成功, 其他值为错误.

*/

4.点击认证按钮时,执行的逻辑:
string authkey = "";  //秘钥
UInt64 t = (ulong)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; //时间戳
UInt64 t0 = 0; //起始参考时间相对UTC
uint x = 60; //口令变化周期,默认60秒
int drift = 0; //上次漂移值
int authwnd = 20; //认证范围
UInt64 lastsucc = 0; //上次成功值
string opt = tbCode.Text; //用户输入的口令
int optlen = 6; //口令长度
UInt64 currsucc = 0; //默认的成功值
int currdft = 0; // 默认的漂移值

//首先验证用户登录,登录成功后将用户信息放到userModel中

Model.TokenModel tokenModel = GetTokenModel(userModel.token_sn); //根据用户表中的令牌序列号查询令牌表中的内容
authkey = tokenModel.token_authkey;
lastsucc = tokenModel.token_currsucc;
drift = tokenModel.token_currdft;

int ret = ET_CheckPwdz201(authkey, t, t0, x, drift, authwnd, lastsucc, opt, optlen, ref currsucc, ref currdft);
if(ret == 0)
{
    更新数据库("update 令牌表 set token_currsucc='" + currsucc + "',token_currdft='" + currdft + "' where 令牌序列号='" + tokenModel.令牌序列号 + "'"); //认证成功时需回写该令牌的成功值和漂移值
    Response.Write("认证成功!(成功值:" + currsucc + ",漂移值:" + currdft + "]");
}
else
{
    Response.Write("认证失败,错误码:" + ret);

}




返回值说明:
        #define OTP_SUCCESS (0x00000000L) //操作成功
        #define OTP_ERR_INVALID_PARAMETER (0x00000001L) //参数无效
        #define OTP_ERR_CHECK_PWD (0x00000002L //认证失败
        #define OTP_ERR_SYN_PWD (0x00000003L) //同步失败
        #define OTP_ERR_REPLAY (0x000000004) //动态口令被重放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 百度Apollo PassageGroup是百度公司旗下的自动驾驶平台,旨在帮助车辆实现自动驾驶技术。这个平台包含了所有必要的软件、硬件和数据,使车辆能够实现自主驾驶。百度Apollo PassageGroup提供了丰富的技术支持,包括自动驾驶技术、人工智能、定位导航、车辆安全和其他技术。该平台还提供了大量的开源软件和数据,使开发人员能够轻松地开发和测试自动驾驶技术。 ### 回答2: 百度Apollo PassageGroup是百度Apollo开放平台的一个重要概念。PassageGroup可以简单理解为一组车道的集合,它将来自传感器和定位系统的原始数据进行融合和处理,用于自动驾驶车辆的环境感知和规划决策。 PassageGroup的主要目标是提供精确的环境感知和高效的规划决策。通过融合多传感器数据,PassageGroup生成车辆周围环境的三维地图,包括障碍物、道路、标志等信息。同时,还可以对目标和障碍物进行跟踪和预测,实现对周围环境的全面感知。 基于PassageGroup的环境感知结果,Apollo系统可以进行智能的路径规划和行驶决策。PassageGroup提供了高精度的地图信息、栅格化的测量数据,以及各种环境参数等,以帮助自动驾驶车辆在实时环境做出决策。同时,PassageGroup还支持多样化的规划算法,可以根据实际需求选择最合适的规划策略。 除了环境感知和规划决策,PassageGroup还具备一些附加功能。例如,它可以提供车道级别的定位精度评估,用于检测和修正车辆的定位误差。此外,它还支持多车辆协同,并能够将路况信息和车辆行驶轨迹进行共享,以实现更智能的交通导航和安全控制。 总的来说,百度Apollo PassageGroup是基于多传感器数据融合的环境感知与规划决策模块,为自动驾驶汽车提供精准的环境感知、高效的路径规划和智能的决策功能。它是百度Apollo国内领先自动驾驶开放平台的重要组成部分,为推动自动驾驶技术的发展做出了很大的贡献。 ### 回答3: 百度Apollo是百度公司为自动驾驶汽车领域开发的一套完整的解决方案。其,Apollo PassageGroup(通道组)是Apollo的一个重要部分。 Apollo PassageGroup是指在自动驾驶场景,车辆在特定地理区域内进行驾驶时所经过的道路环境和障碍物信息的管理组。它主要包括地图数据、路网信息、实时车辆定位信息和场景感知数据等。通过Apollo PassageGroup的准确管理和更新,自动驾驶车辆能够对周围环境的变化做出及时反,实现自动驾驶的安全与精确性。 百度Apollo PassageGroup使用高精度地图数据作为基础,提供车辆及时的定位和路径规划。地图数据包含了道路的宽度、车道线、交叉口、限速标识等详细信息,车辆依靠这些信息可以实现精确的定位和导航。同时,Apollo PassageGroup会实时更新车辆所在位置的场景感知数据,包括周围车辆、行人、障碍物等,为车辆提供更准确的环境认知和决策依据。 在Apollo PassageGroup,车辆的路径规划及时响交通状况的变化,并进行动态调整,以保证安全和效率。通过实时的路况信息和场景感知,Apollo能够智能判断最优路径,并进行实时路径规划。车辆通过对Apollo PassageGroup的数据进行综合分析,实现对周围道路环境的感知和理解,提高自动驾驶车辆的驾驶精度和安全性。 总之,百度Apollo PassageGroup是百度自动驾驶解决方案的重要组成部分,它通过管理和更新地图数据、车辆定位信息和场景感知数据,为自动驾驶车辆提供准确的定位、导航和路径规划,实现安全、高效的驾驶体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值