MD5加密密码为$1$12345678$blahblahblah
。盐是两个$
标志之后的8位数字键。我如何提取那些8?
到目前为止,我有char *salt =
,我需要使它等于字符串的第十个索引。
答案 0 :(得分:0)
您的问题包含"提取"这有点复杂,因为不清楚是否要将这8个字符复制到新的缓冲区中,或者如果您想要做其他事情。
我可以想象,或许您只想将这8个字符显示给控制台用户。以下代码实现了这一点(但可能需要一些解释):
char *salt = "$1$12345678$blahblahblah";
int from = 3;
int to = 10;
int len = to-from+1;
printf("%.*s\n", len, salt+from);
Printf()及其变体具有一些非常强大的字符串生成/操作功能。在这种情况下,我使用了"精度"说明符作为“'”的参数提供。转换。如果给出了一个精确度的精确度。转换是为了限制发出的字符数。我用过' len'通过' *'字符以参数化方式提供此限制。如果你知道你总是要从第3个开始想要发出8个字符(在C中我们总是从0开始计数而不是从1开始),那么你的代码可以简化为下面给出的更简单的形式:
char *salt = "$1$12345678$blahblahblah";
printf("%.8s\n", salt+3);
最后,sprintf可用于复制到另一个缓冲区。我将在下面给出一个简单的此任务形式(请注意,为了清楚起见,我更改了变量名称;您从一行密码文本中提取盐):
char *password = "$1$12345678$blahblahblah";
char salt[9]; /* Size of 9 required to hold terminating NULL byte */
sprintf(salt, "%.8s\n", password+3);
/* Now you can use salt for various purposes */
printf ("The salt is %s\n", salt);