/** int check_passwd(char* passwd, char* cryptpass) 生パスワード passwd と暗号化されたパスワード cryptass(salt付き)が同じものであるかどうかチェックする.@n 使用できる暗号化(ハッシュ値化)は DES と MD5(自動判別) @param passwd 検査する生パスワード @param cryptpass 比較対象のハッシュ値化されたパスワード @retval TRUE 同じ @retval FALSE 違う */ int check_passwd(char* passwd, char* cryptpass) { int samepass=FALSE; char* salt; if (passwd==NULL || cryptpass==NULL) return FALSE; if (!strncmp("$1$", cryptpass, 3) && strlen(cryptpass)==LEN_MD5PASS) { // MD5 salt = cut_str(cryptpass, 0, LEN_MD5SALT-1); if (!strcmp(crypt(passwd, salt), cryptpass)) { samepass = TRUE; } free(salt); } else if (strlen(cryptpass)==LEN_DESPASS) { // DES salt = cut_str(cryptpass, 0, LEN_DESSALT-1); if (!strcmp(crypt(passwd, salt), cryptpass)) { samepass = TRUE; } free(salt); } return samepass; }
/** char* x2crypt(char* pass, char* bsalt) pass を bsalt で2回暗号化(ハッシュ値化)する.@n bsaltには改行コード(@\nまたは @\r@\n)で区切られた2個のsaltが入っている必要がある. @param pass ハッシュ値化するパスワード @param bsalt 改行コード(@\nまたは @\r@\n)で区切られた2個の salt. @return 2度ハッシュ値化された文字列.要 free @bug bsaltに 2個のslatが入っていなかったときの動作は? -> 不明 */ char* x2crypt(char* pass, char* bsalt) { char* cpass; char* dpass = NULL; char* csalt; if (pass==NULL || bsalt==NULL) return NULL; csalt = get_line(bsalt, 1); cpass = crypt(pass, csalt); freeNull(csalt); csalt = get_line(bsalt, 2); if (csalt==NULL) return NULL; if (strlen(cpass)==LEN_MD5PASS) { dpass = cut_str(cpass, LEN_MD5SALT, LEN_MD5PASS-1); cpass = crypt(dpass, csalt); freeNull(dpass); dpass = cut_str(cpass, LEN_MD5SALT, LEN_MD5PASS-1); } else if (strlen(cpass)==LEN_DESPASS) { dpass = cut_str(cpass, LEN_DESSALT, LEN_DESPASS-1); cpass = crypt(dpass, csalt); freeNull(dpass); dpass = cut_str(cpass, LEN_DESSALT, LEN_DESPASS-1); } freeNull(csalt); return dpass; }
t_instr *ft_first_line(char *str) { t_instr *ptr; int i; char *str2; int a; ptr = NULL; a = ft_strlen_mod(str); if (check_v(str, a) == 1) { str2 = (char *)malloc(sizeof(*str2) * 1000); ptr = (t_instr *)malloc(sizeof(t_instr) * 1000); i = 0; str2 = cut_str(str, a - 5); ptr->height = ft_atoi(str2); ptr->length = a; ptr->empty = str[a - 4]; ptr->obst = str[a - 3]; ptr->full = str[a - 2]; } return (ptr); }
int main(int argc, char *argv[]) { char test_str[DEFAULT_TITLE_LENGTH] = "Hello, 如果这是全是中文,是不是会出现半个汉字呢?utf-8字符"; char buf[DEFAULT_TITLE_LENGTH] = {0}; int length = 16; if (argc > 1 && argv[1][0]) { length = atoi(argv[1]); if (length <= 0) { length = 8; fprintf(stderr, "args length is wrong, use default value: %d.\n", length); } } cut_str(test_str, buf, "utf-8", length, "..."); printf("The cut length = %d\n", length); printf("[src:] %s\n[cut str:] %s\n", test_str, buf); printf("buf string len: %d\n", (int)strlen(buf)); return 0; }