Improved quick hack to convert a 1pif (1Password export) to kdbx (KeePass).

Install dependencies

pipenv install

Run converter

pipenv run ./convert.py infile.1pif

Basic 1Password 1PIF structure

{
    'contentsHash': 'cf89d854',
    'createdAt': 1617646219,
    'location': 'https://domain.com/',
    'locationKey': 'domain.com',
    'openContents': {
        'tags': ['Tag1', 'Tag2']
    },
    'secureContents': {
        'URLs': [
            {'label': 'website', 'url': 'https://domain.com/'}
        ],
        'fields': [
            {
                'designation': 'username',
                'name': 'name_of_username_field_on_website',
                'type': 'T',
                'value': 'john.doe'
            },
            {
                'designation': 'password',
                'name': 'name_of_password_field_on_website',
                'type': 'P',
                'value': 'ultrasecurepassword'
            }
        ],
        'notesPlain': 'This is a note.',
        'sections': [
            {
                'fields': [
                    {
                        'inputTraits': {'autocapitalization': 'Words'},
                        'k': 'string',
                        'n': 'org_name',
                        't': 'group',
                        'v': 'My Organisation'
                    },
                    {
                        'inputTraits': {'autocapitalization': 'Words'},
                        'k': 'string',
                        'n': 'member_name',
                        't': 'member name',
                        'v': 'John Doe'
                    }
                ]
                'name': '',
                'title': ''
            },
            {
                'name': 'linked items',
                'title': 'Related Items'
                // no "fields" structure = empty section
            }
        ]
    },
    'scope': 'Never',
    'securityLevel': 'SL5',
    'title': 'My secret password',
    'typeName': 'webforms.WebForm',
    'updatedAt': 1618176026,
    'uuid': 'ysd77pxq4zghhodfbo47cewudy'}

Fields inside sections can be of various types: text, url, email, address, date, month/year, otp, password or a phone number.

Also there are different typeName values that define different field presets.

Basic KeePass structure

- UUID
- Title
- UserName
- Password
- URL
- Tags
- IconID
- Times
- History
- Notes
- custom fields

Default fields are text. Custom fields can also only be of type text - either hidden (password field) or not.

Description
Quick hack to export a 1pif (1Password export) to kdbx (KeePass). Originally forked from https://github.com/rubenv/1pif-to-kdbx
Readme MIT 91 KiB
Languages
Python 100%