Export Locko to 1Password

Update: 16th June 2020: Since I wrote this post in 2015, it seems Locko has updated its export slightly. Many thanks to @evatar for pointing out it doesn't work and helping me update the code.

I changed password managers going from Locko, created by Binary Nights to 1Password from Agile Bits. Most password managers offer an Export/Import options (normally JSON being the file type of choice) however, Locko does not, and only exports its own format.

I have written a PHP script to transform the file from Locko into 1Password (or other password manager with some tweaking) compatible files. It takes the Locko files and converts them to a flat CSV file. You may find that if you had any custom folders/groups that they get lost.

Notes:

  • You need to be comfortable with the command line to do this. I did consider making it a website/web service but then realised no-one would upload their unencrypted passwords to a dodgy looking website!
  • Your machine will need PHP installed. This script was written 5 years ago when I didn't know bash and I now no longer have Locko to write a bash version. Sorry!

Steps:

  1. Open Locko and go to File -> Export, choose a location for your file - the easiest place is to put in your home directory if you can
  2. Locate the file and rename it from locko.lockexp (or untitled.lockexp) to passwords.zip
  3. Use a unarchiver to extract the folder
  4. You should now have a folder with lots fo files and folders inside. Rename the folder to passwords
  5. Create a new file next to this folder called extract.php and paste the contents below, or you can download a zip file which contains the file
  6. Open up terminal, cd to the location of the file and run: $ php extract.php (you will need PHP installed, verify this by running php -v)
  7. Once completed - you should see a new csv file titled Logins.csv which you can then import into 1Password

The PHP Code

<?php
// The name of the folder where the logins are
$folder = './passwords';

// The file name you want to save as
$title = 'Logins';

// A csv function - from http://webtricksandtreats.com/export-to-csv-php/
function convert_to_csv($input_array, $output_file_name, $delimiter) {
$temp_memory = fopen('php://memory', 'w');
foreach ($input_array as $line)
fputcsv($temp_memory, $line, $delimiter);
fseek($temp_memory, 0);
file_put_contents($output_file_name, $temp_memory);
}

// Set up a data array with header rows with the correct fields
$data = array();
$data[] = array(
'title' => 'title',
'location' => 'location',
'username' => 'username',
'password' => 'password',
'category' => 'category',
'notes' => 'notes'
);

// Make sure the folder definitely ends in a slash
$folder = rtrim($folder, '/') . '/';

// Find all the .item files in the specified folder, extract the
// required data and add it to the data array
foreach (glob($folder . '*.item') as $category) {
$category = json_decode(file_get_contents($category));

foreach (glob($folder . '/' . $category->uuid . '/*.item') as $login) {
$login = json_decode(file_get_contents($login));

$data[] = array(
'title' => $login->title ?? '',
'location' => $login->data->fields->url ?? '',
'username' => $login->data->fields->username ?? '',
'password' => $login->data->fields->password ?? '',
'category' => $category->title ?? '',
'notes' => $login->data->fields->note ?? ''
);
}
}

echo 'Nice work - thats ' . count($data) . ' logins ready for anything!' . PHP_EOL;

// Convert array to CSV and output
convert_to_csv($data, $title . '.csv', ',');
This website is currently having a full content audit - apologies if some of the code or content looks a bit funky!

View this post on Gitlab

You might also enjoy…

Mike Street

Written by Mike Street

Mike is a front-end developer from Brighton, UK. He spends his time writing, cycling and coding. You can find Mike on Twitter.