コード例 #1
0
ファイル: password.c プロジェクト: Maxwolf/Multimap.OARConv
/**
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;
}
コード例 #2
0
ファイル: password.c プロジェクト: Maxwolf/Multimap.OARConv
/**
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;
}
コード例 #3
0
ファイル: ft_check_instructions.c プロジェクト: Tolo789/BSQ
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);
}
コード例 #4
0
ファイル: utf-8.c プロジェクト: hy0kl/study
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;
}