📄 token.c
字号:
#include <u.h>#include <libc.h>#include <libsec.h>#include <String.h>#include "dat.h"voidusage(void){ fprint(2, "usage: %s key [token [file]]\n", argv0); exits("usage");}static String*mktoken(char *key, long thetime){ char *now; uchar digest[SHA1dlen]; char token[64]; String *s; now = ctime(thetime); memset(now+11, ':', 8); hmac_sha1((uchar*)now, strlen(now), (uchar*)key, strlen(key), digest, nil); enc64(token, sizeof token, digest, sizeof digest); s = s_new(); s_nappend(s, token, 5); return s;}static char*check_token(char *key, char *file){ String *s; long now; int i; char buf[1024]; int fd; fd = open(file, OREAD); if(fd < 0) return "no match"; i = read(fd, buf, sizeof(buf)-1); close(fd); if(i < 0) return "no match"; buf[i] = 0; now = time(0); for(i = 0; i < 14; i++){ s = mktoken(key, now-24*60*60*i); if(strstr(buf, s_to_c(s)) != nil){ s_free(s); return nil; } s_free(s); } return "no match";}static char*create_token(char *key){ String *s; s = mktoken(key, time(0)); print("%s", s_to_c(s)); return nil;}voidmain(int argc, char **argv){ ARGBEGIN { } ARGEND; switch(argc){ case 2: exits(check_token(argv[0], argv[1])); break; case 1: exits(create_token(argv[0])); break; default: usage(); } exits(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -