linux用户密码生成
linux账户保存在/etc/passwd,密码保存在/etc/shadow。
通过man 5 passwd,man 5 shadow可查看文件中各字段含义。
encrypted password
           Refer to crypt(3) for details on how this string is interpreted.
密码是通过库函数crypt生成的。
1. 函数
#define _XOPEN_SOURCE       /* See feature_test_macros(7) */
       #include <unistd.h>
char *crypt(const char *key, const char *salt);
输入参数:key为密码,salt本意为盐,为增加密码难度,加把盐。salt有新旧两种方式:
key is a user's typed password.
salt is a two-character string chosen from the set [a–zA–Z0–./]. This string is used to perturb
the algorithm in one of different ways.
The glibc2 version of this function supports additional encryption algorithms.
       If salt is a character string starting with the characters "$id$" followed by a  string  terminated
       by "$":
              $id$salt$encrypted
       then  instead  of  using  the  DES  machine, id identifies the encryption method used and this then determines how the rest of the password string is interpreted.  The following values of id are supported:
              ID  | Method
              ─────────────────────────────────────────────────────────
                 | MD5
              2a  | Blowfish (not in mainline glibc; added in some
                  | Linux distributions)
                 | SHA- (since glibc 2.7)
                 | SHA- (since glibc 2.7)
       So  $$salt$encrypted  is  an  SHA- encoded password and $$salt$encrypted is an SHA- encoded
       one.
       "salt" stands for the up to  characters following "$id$" in the salt.  The encrypted part of  the password string is the actual computed password.  The size of this string is fixed:
       MD5     |  characters
       SHA- |  characters
       SHA- |  characters
       The  characters in "salt" and "encrypted" are drawn from the set [a–zA–Z0–./].  In the MD5 and SHA implementations the entire key is significant (instead of only the first  bytes in DES).
现在linux都实现的是第二中方式的salt。
2. coding
#define _XOPEN_SOURCE #include <stdio.h>
#include <unistd.h> int main(int argc, char*argv[])
{
if(argc != ){
return ;
} printf("%s==%s==%s==\n", argv[], argv[], argv[]); printf("%s\n", crypt(argv[], argv[])); return ;
}
创建test用户,密码test123
test:$$BJIQmFkQ$TnJMVbBoWvE4fBkJ30iJlQwDLxV3wLaZ8pVqrh7N5m0mTWD.vNdRw/uEs8Wu7IB.sfvzBYZUweM6Rd0M43bm61:::::::
程序测试
~$gcc crypt.c -lcrypt
~$./a.out test $$BJIQmFkQ$
./a.out==test==$==
Segmentation fault (core dumped)
~$./a.out test "\$6\$BJIQmFkQ\$"
./a.out==test==$$BJIQmFkQ$==
$$BJIQmFkQ$uIMnVVN/FUac.VGm0Ie6g.gWjIRsE0PSNX8ufDcekvmGZ7PtrLVJbrZTlhYplfyEbonrBYpwvHIWGQx9XxeQG/
~$./a.out test "BJIQmFkQ"
./a.out==test==BJIQmFkQ==
BJp/Gyj8SpEnI
~$./a.out test123 "\$6\$BJIQmFkQ\$"
./a.out==test123==$6$BJIQmFkQ$==
$6$BJIQmFkQ$TnJMVbBoWvE4fBkJ30iJlQwDLxV3wLaZ8pVqrh7N5m0mTWD.vNdRw/uEs8Wu7IB.sfvzBYZUweM6Rd0M43bm61
linux用户密码生成的更多相关文章
- Linux用户密码策略
		
使用Linux快三年了,从未想过Linux用户密码策略,从未把一本Linux的书从头看到尾(上学时的教材除外),故不知书上有无介绍,直到最近参加公司的信息安全稽核会议后才开始考虑Linux用户密码策略 ...
 - 修改linux用户密码
		
对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password: ...
 - Linux用户密码期限修改
		
今天有开发报故,sftp无法登录.检查服务都是正常的,之前3月份也出现过此问题,当时忙没有注意,现在看每3个月出现问题.这才想到是密码过期导致的. 先重置用户密码,发现过期日志为Oct 08, 201 ...
 - 忘记Linux用户密码怎么办?
		
忘记密码解决办法(centos6.5版本) 1.开机时,在此页面一直按ESC 2.然后进入以下界面时,按一下字母 “E” 键 (3)再按字母 “E” 键 (4)之后 输入 ...
 - linux用户密码过期导致命令执行失败
		
背景介绍: 使用zabbix调用系统命令,检查时间同步,发现一直在报错,root 用户执行无异常,问题还是出现zabbix用户上面. [zabbix@test-10-12 ~]$ sudo ntpda ...
 - Linux用户密码文件/etc/shadow相关
		
(1).密码文件 [root@xuexi ~]# head -3 /etc/shadow root:$6$kcgcu794R0VP3fDL$aYN8XUbtWvZ4QQtT2xVW.N2CgE3YLP ...
 - Linux用户密码重置方法
		
方法一: 启动时,随便按一个键,空格即可(不能是回车),让其停留在如下界面 按e编辑 在UTF-8后面添加init=/bin/sh init=/bin/sh 根据上面提示,按Ctrl+x启动得下图 输 ...
 - changepassword.c 0.9:一个通过WEB界面更改LINUX用户密码的程序
		
偶然看到一个用C语言写的CGI程序,可以以WEB界面(无需单独再写HTML)的方式修改用户自己的密码.该程序具有同时修改samba及squid密码的能力. 步骤: 1.下载并解压,并读一下README ...
 - linux 用户密码过期时间
		
/etc/login.defs 全局配置文件,即当新建用户时的默认设置 PASS_MIN_DAYS 5 #最近一次密码更新的日期+0 ,即允许用户更改自己的密码的日期 PASS_MAX_ ...
 
随机推荐
- Android中的动态字符串的处理
			
1.效果显示 2. MainAcitivity.java package com.example.app2; import android.support.v7.app.AppCompatActivi ...
 - Asp.Net MVC part2  View、Controller详解
			
View详解Razor视图引擎简介HtmlHelper强类型页面 Razor视图引擎简介强大的@:表示使用C#代码,相当于aspx中的<%%>可以完成输出功能当遇到html标签时会认为C# ...
 - 搭建SSH框架–搭建篇
			
工具: IDE:My Eclipse 2015 数据库:Orcale 创建Web项目 1.1 名称:PersonalWeb 1.2 勾选创建web.xml 1.3 Finsh 搭建Spring框架 2 ...
 - python中的else子句
			
在一般的语言中else子句一般是紧跟在if 子句后面,但是python语言中else子句可以不跟在if子句后面,请看下面代码: >>> for n in range(2, 10): ...
 - 使用gettext提取c#中的多语言占位符(nopCommerce示例篇)
			
i18n国际化通常的作法是使用gettext,即在源码中使用特殊的关键字来标识这个字符串将可能被翻译,如 @if (Model.IsCustomerForumModerator) { <li c ...
 - android连接Mysql数据库之JDBC方式
			
一.创建一个数据库和若干表,并导入相关信息.这里以我之前使用的一个图书系统的数据库为例子. 首先假设已经安装并配置好Mysql.(建议大家安装WAMP,也就是安装完这个,就相当于安装了Mysql,PH ...
 - Word如何设置单元格垂直居中
			
那两个上面是水平居中,下面是垂直居中.
 - JET 调用后端Rest Service
			
调用Rest Service可以基于两种方式: 一种是oj.Collection.extend 一种是$.ajax CORS问题 但在调用之前,首先需要解决rest service的CORS问题.(跨 ...
 - delphi 接口Interface
			
学习 delphi 接口 一切都是纸老虎!!! 第四章 接口 前不久,有位搞软件的朋友给我出了个谜语.谜面是“相亲”,让我猜一软件术语.我大约想了一分钟,猜 出谜底是“面向对象”.我 ...
 - min-height IE6的解决方案
			
selector { min-height:500px; height:auto !important; height:500px; } 因为IE6中当内容大于容器高度或宽度时,就会撑破容器.并且在同 ...