Importar senhas do lastpass para keepassx

3

Eu queria saber como se havia alguma maneira atual de importar senhas lastpass para keepass / keepassx? Eu encontrei o programa lastpass2keepass.py, mas parece que não funciona mais (lastpass atualizou seus campos csv?).

    
por Ben 29.04.2011 / 05:49

4 respostas

6

Bem, parece que não existia, então eu juntei um script php rápido para fazer isso.

Se alguém mais precisar fazer isso. Execute este script, cole o csv exportado na área de texto e insira o arquivo csv de saída para 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
}
?>
    
por 29.04.2011 / 07:36
4

A partir de 19 / dez / 2012, o script link de fato funciona.

Apenas exporte seus dados do LastPass no formato CSV e, em seguida, execute-os através do script python e, em seguida, importe-os para o KeePass (usei o KeePassX)

    
por 19.12.2012 / 21:45
2

Exporte suas senhas LastPass para um arquivo CSV. Clique no ícone do navegador LastPass, vá para Tools > Export to > LastPass CSV file .

Em seguida, no KeePass, acesse File > Import > %código%. Isso deve importar as senhas.

    
por 29.04.2011 / 06:09
0

A partir do KeePassX 2.0.2 e lastpass2keepass de 23 de outubro de 2014, não possível importar nem XML nem CSV para o KeePassX.
Simplesmente não existe esse botão (apenas kdb import é fornecido).

Quaisquer soluções alternativas conhecidas?

Sim, KeePassXC - desative a etapa de conversão e vá direto para a importação de CSV (marque a primeira linha como nomes de campo).

    
por 22.11.2017 / 09:51