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

荆门做网站nba最新消息

荆门做网站,nba最新消息,做网站卖东西流程,wordpress user proTOTP定义:基于时间的一次性密码算法(英语: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/232397.html

相关文章:

  • 创建网站需要注意什么南通做网站推广的公司
  • 做网站构建搜索引擎营销seo
  • 企业网站服务器少儿编程
  • 网站错误页面模板免费发布信息网网站
  • 做网站要会哪些软件推广平台免费b2b网站大全
  • 有一个网站叫浪什么百度如何添加店铺位置信息
  • 网站建设 最新软件今日国内热点新闻头条事件
  • vscode的网站开发配置semen
  • 招聘网站建设规划书搜索引擎营销的特征
  • 网站建设接单正规教育培训机构
  • 太原网站建设360淘宝权重查询入口
  • 招聘网站如何做薪酬报告简单的seo
  • 网站制作设计教程做百度推广
  • 常州模板建站哪家好郑州seo方案
  • 网站空间哪个比较好百度排行榜小说
  • 互联网骗局浏览网站做任务网店推广平台有哪些
  • 应用制作app软件整站优化是什么意思
  • 自适应网站的图做多大 怎么切seo招聘信息
  • 怎么用本机做服务器发布网站seo在线优化
  • 住房城乡建设部网站文件查询附近电脑培训班位置
  • 本地php网站搭建b站推广网站2024年
  • 宿迁市网站建设百中搜优化软件靠谱吗
  • wordpress 后台文章免费seo软件推荐
  • c 做游戏的网站教学郑州网站优化排名
  • 男女做暖暖暖网站广告投放平台有哪些
  • 大型房产网站建设网站源码平台
  • 做网站容易学吗seo代码优化
  • 可以做网站吗店铺推广引流的方法
  • 小城镇建设投稿网站服务营销案例
  • php网站开发专业高质量外链