当前位置: 首页 > wzjs >正文

服装外贸erp苏州seo怎么做

服装外贸erp,苏州seo怎么做,宝塔wordpress加速,哪里可以做期货网站平台TOTP定义:基于时间的一次性密码算法(英语:Time-based One-Time Password,简称:TOTP)是一种根据共享密钥与当前时间计算一次性密码的算法。 Google Authenticator,谷歌动态口令,Googl…

        TOTP定义:基于时间的一次性密码算法(英语:Time-based One-Time Password,简称:TOTP)是一种根据共享密钥当前时间计算一次性密码的算法。

        Google Authenticator,谷歌动态口令,Google身份验证器Google Authenticator是谷歌推出的基于时间的一次性密码(Time-based One-time Password,简称TOTP),只需要在手机上安装该APP,就可以生成一个随着时间变化的一次性密码,用于帐户验证。

        微信小程序搜索TOTP也可以找到不少实现该功能的小程序。

       根据TOTP定义以及谷歌动态口令APP,我们可以实现postgresql数据库基于TOTP的二次认证

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <openssl/hmac.h>
#include <openssl/sha.h>#define OTP_LENGTH 6
#define TIME_STEP 30
#define BASE32_LENGTH 32// Base32 编码字符集
static const char base32_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";// Base32 解码函数
void base32_decode(const char* base32, unsigned char* output, size_t* output_len) {size_t bit_index = 0;int shift = 0;*output_len = 0;for (const char *ptr = base32; *ptr; ptr++) {char value;if (*ptr >= 'A' && *ptr <= 'Z') {value = *ptr - 'A';} else if (*ptr >= '2' && *ptr <= '7') {value = *ptr - '2' + 26;} else {continue; // 非法字符跳过}bit_index += 5;if (bit_index >= 8) {output[*output_len] |= (value >> (bit_index - 8));(*output_len)++;output[*output_len] = 0; // 初始化下一个字节bit_index -= 8;}output[*output_len] |= (value << (8 - bit_index));}
}// 计算时间间隔
long get_time_interval() {return time(NULL) / TIME_STEP; // 获取当前时间步长
}// HMAC-SHA1 计算
unsigned char* hmac_sha1(const unsigned char* key, int key_len,const unsigned char* data, int data_len,unsigned char* result, unsigned int* result_len) {return HMAC(EVP_sha1(), key, key_len, data, data_len, result, result_len);
}// 生成TOTP
int generate_totp(const unsigned char* key, int key_len) {long time_interval = get_time_interval();unsigned char time_bytes[8] = {0};// 将时间步长转换为8字节大端格式for (int i = 0; i < 8; i++) {time_bytes[7 - i] = time_interval & 0xFF;time_interval >>= 8;}// 生成HMAC-SHA1unsigned char hmac_result[SHA_DIGEST_LENGTH];unsigned int hmac_len = 0;hmac_sha1(key, key_len, time_bytes, sizeof(time_bytes), hmac_result, &hmac_len);// 计算动态截断的OTPint offset = hmac_result[hmac_len - 1] & 0x0F;int otp = (hmac_result[offset] & 0x7F) << 24 |(hmac_result[offset + 1] & 0xFF) << 16 |(hmac_result[offset + 2] & 0xFF) << 8 |(hmac_result[offset + 3] & 0xFF);otp %= (int)pow(10, OTP_LENGTH); // 限制OTP长度return otp;
}int main(int argc, char *argv[]) {// 使用固定的Base32编码密钥const char* secret = "JBSWY3DPEHPK3PXP"; // 这是 Base32 编码的密钥unsigned char key[20] = {0}; // 用于存储解码后的密钥size_t key_len;if (argc > 1)secret= argv[1];// Base32 解码密钥base32_decode(secret, key, &key_len);int generated_otp = generate_totp(key, key_len);printf("生成的OTP: %06d\n", generated_otp);return 0;
}

        将上述示例程序中的基础密钥"JBSWY3DPEHPK3PXP"输入到谷歌APP或微信小程序中,即可以查看生成的基于时间的一次性密码;把示例程序稍作改动即可做成totp客户端。

http://www.dtcms.com/wzjs/9669.html

相关文章:

  • b2c网站建设 广州青岛网站推广系统
  • iis网站连接数据库失败学生个人网页制作教程
  • 织梦政府网站模板广告收益平台
  • python php 做网站seo范畴
  • 校园网站建设重要性免费建网站软件哪个好
  • 北京做企业网站的公司佛山企业用seo策略
  • 河北企业建站系统信息如何推广网站方法
  • 网站怎么做二级域名热点新闻最新消息
  • 网站排名如何上升网上哪里接app推广单
  • 机械加工网上找订单站长工具seo查询5g5g
  • 有网站地图的网站2024年阳性什么症状
  • wordpress 点击文章图片路径上海关键词优化公司bwyseo
  • 杭州产品设计公司seo如何优化关键词排名
  • 常州商城网站制作公司济南seo整站优化厂家
  • 游戏网页界面设计常州seo外包公司
  • 城口网站建设推广普通话宣传语手抄报
  • 西安做网站服务qq营销
  • 海洋公司做网站推广google登录入口
  • 网站开发工程师 招聘武汉seo广告推广
  • 听完米课做的网站网站制作教程
  • 微信公众号开发是否需要建立网站楼市最新消息
  • 家装设计网站大全wordpress建站
  • 怎么做存储网站大数据推广公司
  • 长沙公司网站开发最佳的资源磁力搜索引擎
  • 做网站什么都不懂 怎么做站长工具seo综合查询分析
  • 英迈思网站做不下去可以退款吗文职培训机构前十名
  • wordpress配置smtp邮箱运营seo是什么意思
  • 网站代理建设李勇seo博客
  • 广州正规网站建设公司国外搜索引擎大全不屏蔽
  • 医药网站建设需要注意点技能培训