Импортируйте пароли из lastpass в keepassx

5686
Ben

Мне было интересно, как, если есть какие-либо текущие способы импортировать пароли lastpass в keepass / keepassx? Я нашел программу lastpass2keepass.py, но она, похоже, больше не работает (lastpass обновил их поля csv?).

3

4 ответа на вопрос

6
Ben

Ну, похоже, их не было, поэтому я собрал быстрый php-скрипт для этого.

Если кому-то еще нужно это сделать. Запустите этот скрипт, вставьте экспортированный CSV-файл в текстовое поле и введите выведенный CSV-файл в keepass.

<?php if (isset($_POST["submit"])) { //Loop through, build a multi array; $parsedCSV = array(); //Columns (in order) to parse out. $ColumnAssociation = array("%%name%%","%%username%%","%%password%%","%%url%%","%%extra%%"); //The xml strings to use for output, replace %%COLUMNNAME%% with COLUMNVALUE  $LastPassHeaders = array();  $inQuotes = false; $quoteType = ''; $curColumn = 0;  //My epic parser, I know, deal with it (it wasn't meant to be modified) $first = true; $curLine = 0; foreach (explode("\n",$_POST["csvinput"]) as $line) { if (empty($line)) //I do this instead of searching for \r\n, because linux just uses \n (I think :/) continue;  $letters = str_split($line); //print_r( $letters); for ($i = 0; $i < count($letters); $i++) { /*if ($first) //get lastpass's headers (they are the first row {  }*/  //Set inQuotes if (!$inQuotes && $letters[$i] == "'" && ($i - 1 < 0 || $letters[$i - 1] != '\\')) //Not Inquotes, matching singlequote, not prefixed with escape character { $inQuotes = true; $quoteType = "'"; continue; } else if (!$inQuotes && $letters[$i] == '"' && ($i - 1 < 0 || $letters[$i - 1] != '\\')) //Not Inquotes, matching doublequote, not prefixed with escape character { $inQuotes = true; $quoteType = '"'; continue; } else if ($inQuotes && $letters[$i] == $quoteType && ($i - 1 < 0 || $letters[$i - 1] != '\\')) //Inquotes, is the endquote, and isn't prefixed with an escape character { $inQuotes = false; $quoteType = ''; continue; } //Finished with quotes  if (!$inQuotes && $letters[$i] == ',' && ($i - 1 < 0 || $letters[$i - 1] != '\\')) { $curColumn++; continue; /*if ($curColumn > count($ColumnAssociation)) throw new Exception("TO MANY COLUMNS FTW");*/ }  //Well, because lastpass doesn't incapsulate their stuff, I guess I'll just wing it if (!$first) //If not headers, parse normally { if (!isset($parsedCSV[$curLine][$LastPassHeaders[$curColumn]])) $parsedCSV[$curLine][$LastPassHeaders[$curColumn]] = ""; $parsedCSV[$curLine][$LastPassHeaders[$curColumn]] .= $letters[$i]; } else if ($first) { if (!isset($LastPassHeaders[$curColumn])) $LastPassHeaders[$curColumn] = ''; $LastPassHeaders[$curColumn] .= $letters[$i]; } } if ($inQuotes) throw new Exception('Error, Unexpected end of line (Check quotes)');  $curColumn = 0; if ($first) $first = false; else $curLine++; //Put this here so it only adds to the column number if the current row wasn't the first row (header) } //print_r($parsedCSV); //print_r($LastPassHeaders);  $output = '"Account","Login Name","Password","Web Site","Comments"'."\r\n"; //Alright, now reprint in xml format foreach ($parsedCSV as $row) { //print_r($row); //Don't output Generated passwords? if (isset($_POST["rgp"]) && $_POST["rgp"] && stristr($row['name'],'Generated Password for ')) continue;  //$output .= "<pwentry>\r\n";  foreach ($ColumnAssociation as $xmlstring) //first loop through each xml string { $nxml = $xmlstring; foreach ($LastPassHeaders as $name) //then loop through each possible variable in the string if (isset($row[$name])) //because if a column is empty, it isn't even set in the array $nxml = str_replace('%%'.$name.'%%',$row[$name],$nxml); //then replace found variables else $nxml = str_replace('%%'.$name.'%%','',$nxml); //just because it isn't set, doesn't mean it isn't a real variable, hide it  $output .= '"'.$nxml.'",'; } $output = substr($output,0,-1); //remove end, //$output .= "</pwentry>\r\n"; $output .= "\r\n"; }   header("Content-type:application/csv");  // It will be called lastpass-export.csv header("Content-Disposition:attachment;filename=lastpass-export.csv"); echo $output; } else { ?> <html> <body> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST"> <textarea name="csvinput" cols="100" rows="20"></textarea><BR />  Remove Generated Passwords? <input type="checkbox" name="rgp"/ ><BR/>   <input type="submit" name="submit" value="Generate" /> </form> Created By Mazzzzz </body> </html> <?php } ?> 
эй, вы также можете взглянуть на этот http://www.keepassx.org/forum/viewtopic.php?f=5&t=2077 rzlines 13 лет назад 1
@mazzzzz Здравствуйте, ваш сценарий безопасен и не отправляет конфиденциальные данные вам? У вас есть обновленная версия этого скрипта? Boris_yo 12 лет назад 1
Я позаботился о том, чтобы поставить исходный код, чтобы он мог быть рецензирован (вы правы, это не то, что вы должны доверять проприетарному программному обеспечению). У меня также есть хороший результат здесь + stackoverflow.com; и никто еще не прокомментировал это, чтобы иметь утечку данных; И, конечно, если вы не чувствуете себя в безопасности, используя его, вы можете найти другой вариант;). Ben 12 лет назад 1
4
Andrew Burns

As of 19/Dec/2012 the https://github.com/anirudhjoshi/lastpass2keepass script does indeed work.

Just export your LastPass data in CSV format then run it through the python script, then import it into KeePass (I used KeePassX)

2
Sathya

Экспортируйте ваши пароли LastPass в файл CSV. Нажмите на иконку LastPass браузера, перейдите к Tools> Export to> LastPass CSV file.

Далее, в KeePass перейти к File> Import> Generic CSV file. Это должно импортировать пароли.

Хорошая идея, но keepass не нравится экспорт lastpass. Ben 13 лет назад 1
0
jno

По KeePassX 2.0.2 и lastpass2keepass от 23 октября 2014 года, это не возможно импортировать ни XML, ни CSV в KeePassX.
Просто нет такой кнопки ( kdbпредусмотрен только импорт).

Любые известные обходные пути?

Да, это KeePassXC - пропустите шаг конвертации и перейдите прямо к импорту CSV (отметьте 1-ую строку как имена полей).