Skip to content

Catofes/ImoutoPassword

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ImoutoPassword

A tool to generate and store password.

version 0.0.1

##Required Python 3

##Install

sudo python setup.py install

##Usage

ipw -h

##TODO

A LOT

  • IFrame version(chrome extension)
  • Sync
  • Interaction Mode
  • User-define Type
  • Daemon Mode
  • GUI
  • Android

###开发者使用

####密码储存方案

class Password():
    def __init__(self, id=0, user_id=0, mark="", version=0, length=16, url="", intro="", type="def", structure_version=1,
                 update_time=0, encrypt=False, need_update=False, available=True, special=False, sync_code=""):
        self.id = id
        self.user_id = user_id
        self.mark = mark
        self.version = version
        self.length = length
        self.url = url
        self.intro = intro
        self.type = type
        self.structure_version = structure_version
        self.encrypt = encrypt
        self.update_time = time.time()
        if update_time != 0:
            self.update_time = update_time
        self.need_update = need_update
        self.available = available
        self.special = special
        self.sync_code = sync_code
  • id: 密码储存结构的唯一标识。应为不重复的整数。
  • mark: 用于生成密码的字段。应为字符串且不应为空)
  • version: 用于区分同一个mark下不同的密码,即对于同一个mark可以有很多个版本。同一组相同mark的密码此字段应该不同。不同版本生成不同的密码。
  • length: 生成密码长度,密码长度范围应该为8-32个字符。
  • url: 用于记录生成此密码的网址信息。仅用于搜索,可以为空。应为字符串
  • intro: 用于储存密码的额外信息,例如网站名称,用户名等。仅用于搜索,可以为空,应为字符串。
  • type: 用于记录生成密码的类型,和password_type中的处理方法应该一一对应。
  • available: 用于删除记录。标记为False即表明记录无效。
  • encrypt: True表明该记录加密。现未实现
  • structure_version: 表明该记录结构版本,用于向后兼容。
  • special: 用于区分一些特殊记录。标记为True表示为特殊记录,详见下述说明。
  • need_update: 用于当用户更新记忆密码时提醒用户密码变动的字段。现并未实现。
  • user_id: 用于区分用户的唯一标识。应为不重复的整数。在同步时使用。
  • update_time: 更新时间戳,应该为浮点数。同步时使用。
  • sync_code: 检验记录正确与否以及同步标记。同步中使用。

####密码生成方案:

  • 获取主要密码 记作 MPW(master password)
  • 获取要生成密码的mark,version,type,length
  • 获取配置文件中的盐 salt
  • 生成密码 password = sha512(sha512(MPW + mark + str(version) + salt)+"ImoutoPassword")
  • 应用密码类型。详见下述说明 password = change_type(password,type)

####密码类型:

密码类型表示为一个字典:

        "def": {
            "name": "Default",
            "start_with": "",
            "mapping": {
                "a": "A",
                "c": "C",
                "e": "E"
            },
            "regexp": [
                {
                    "reg": "[A-Z]",
                    "add_at_head": "I",
                    "add_at_end": ""
                },
                {
                    "reg": "[a-z]",
                    "add_at_head": "i",
                    "add_at_end": ""
                },
                {
                    "reg": "[0-9]",
                    "add_at_head": "",
                    "add_at_end": "1",
                },
            ],
            "completion": ""
        }

该字典的key def即为该密码类型的名字,也是密码储存中type储存的数据。

应用密码类型步骤:

  • 获取先前生成的sha512数据password。应为16进制表述的字符串。获取要生成密码的长度length。
  • password = start_with + password
  • 循环字典mapping,将key替换为value。
  • password = password + completion
  • 截取password到length
  • 循环regexp, 进行如下处理
    • 搜索正则表达式reg(re.search)。如果匹配继续,否则
    • password = add_at_head + password
    • 截取password到length
    • password = password + add_at_end
    • 截取password到length(从后截取)

About

A tool to generate and store password.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages