2011-02-19

Script zur Konvertierung von Keepass CSV Export Dateien in mBackup CSV Dateien

Auf dem iPhone ist es im Moment nicht möglich im Schweizer iTunes AppStore irgendein Programm zu erwerben, welches KeePass Dateien wenigstens lesen kann.

CORREKTUR
Vor einigen Monaten bin ich auf "MyKeepass" umgestiegen.
Wiederum seit einigen Monaten verwende ich das Programm "MiniKeePass".
Beide funktionierten sehr gut.
"MiniKeePass" erlaubt das erstellen von Einträge.
Bei "MyKeepass" weis ich nicht mehr.
Ich bin schlussendlich auf "MiniKeePass" umgestiegen, weil es damit einfacher ist die Username und Passwort in den anderen Anwendungen zu "pasten".


Ich fand blog.familieluetke.de. Dort wird beschrieben wie man CSV Dateien, welche aus KeePass exportiert wurden, mittels mBackup auf dem iPhone in das Programm mSecure übertragen kann. mSecure kann dann die Einträge lesen und auch bearbeiten. Die Bearbeitung der Einträge macht aber leider wenig sind. Der umgekehrte Weg (vom mSecure --> KeePass) würde einen Strukturverlust mit sich bringen, weil mSecure keine Baumstruktur von Gruppen kennt (im Gegensatz zu KeePass.

Im oben erwähnten Blog wird erwähnt , dass die Reihenfolge der Spalten aus der KeePass CSV-Datei mittels Excel in die richtigen Reihenfolge gebracht werden kann. Wenn man den Prozess aber regelmässig durchführen will, ist dies unpraktisch.

Mein unten aufgelisteten Script führt diese Umstellung automatisch durch.

In KeePass hat man normalerweise auch mehrere Arten von Einträge in Gruppen (mit verschiedene Icons) . Mein Script erlaubt die Eigene KeePass Gruppen in mSecure Eintragstypen mit gleiche oder unterschiedliche Namen zu „übersetzen“. Dazu muss man eine Liste von Wörterpaaren am Anfang des Scripts anpassen. Die Namen in der linken Spalte entsprechen den Gruppen-Namen in KeePass (diese müssen explizit exportiert werden). Die Namen in der rechten Spalte müssen den Namen der Eintragstypen in mSecure entsprechen. Um KeePass Einträge aufnehmen zu können, müssen die Einträge in mSecure immer das gleiche Format haben (URL-Feld, Benutzername-Feld und Passwort-Feld). (Den Kommentar/Hinweis-Feld muss man nicht erstellen. Es ist implizit vorhanden).

Hier mein Script:

#!/usr/bin/perl
#===============================================================================
# FILE NAME: Convert_Keepass_CSV_To_mSecure.pl
# DATE : 2011.02.19
# Tested with versions:
# - KeePass: 1.14
# - mBackup: 1.0.8
#
# Converts a KeePass CSV export file to a CSV format that can be imported by
# mBackup. Such an import creates a kind of backup entry in mBackup.
# This backup entry in mBackup can be loaded into mSecure on the iPhone by
# performing a restore.
#
# This allows to have more than one type of entries in mSecure (each type with
# own name and icon), like the groups in KeePass.
#
# PREREQUISITES: Language Perl. On UNIX systems like Linux, MacOS, Solaris etc.
# Perl should already be installed. On Windows download and install
# Cygwin (http://www.cygwin.com/) and use the install program of
# Cygwin to install Perl.
#
# USAGE: In mSecure create your own Types, always with the folloging fields
# URL, UserName, Password
# (The comment field always implicitly exists)
# In this script, insert/change the pairs of KeePass type name and
# mSecure type name to the list specified by the hash table "entryTypeLst"
# bellow.
# In KeePass export the desired group/trees to CSV file(s) by choosing:
# Options:
# [x] Encode/replace newline characters by 'n'
# Fields to export:
# [x] Password Groups
# [x] Title
# [x] User Name
# [x] Password
# [x] URL
# [x] Notes
#
# Go to the directory were you exported the KeePass CSV files and call this script:
# ./Convert_Keepass_CSV_To_mSecure.pl InKeePassCsvFileName OutmSecureCsvFileName
#
# PARAMETERS: This script reads the file given as first parameter (KeePass CSV file)
# and appends the result to the file given as second parameter (CSV file
# that can be imported by mBackup).
#
# PROBLEMS & SOLUTIONS:
# If you are not able to execute this script check the following.
# - Is this script executable? To be sure, you can make it executable with the following
# statement:
# chmod ug+x Convert_Keepass_CSV_To_mSecure.pl
# - Perhaps the path for Perl that I used in my script, does not match the location
# of Perl on your Computer. Look, if the statement "which perl" returns the same
# path as i used on the very first line of this script (i.e. "/usr/bin/perl")
# if not, change the first line accordingly.
#===============================================================================
my $lineNr= 2;
my $title;
my $user;
my $pwd;
my $url;
my $comment;

# Hash table. Key: Entry type name from KeePass
# Value: Translation from KeePass entry type to the entry type name in mSecure
my %entryTypeTransLst =
(
# KeePass Type, mSecure Type
"Home Alarmanlage", "Hause Alarmanlage",
"Bankkonten", "Bankkonten",
"Device", "Geräte",
"Div.Codes", "Verschiedene Zugriffscodes",
"Diverses", "Verschiedenes"
);
# Whenever a type can not be mapped from KeePass to mSecure by the list above, the type
# below willbe used
my $UNKNOWN_TYPE="Unknown Type";



# ---------- Check input parameters ---------
# Check first parameter (input file name)
if ( !$ARGV[0] ) {
print "ERROR: Name of the input CSV file (first paramater) is missing!";
exit;
}
open(IN_FILE, "<$ARGV[0]"); # Check second parameter (output file name) if ( !$ARGV[1] ) { print "ERROR: Name of the output file (second paramater) is missing!"; exit; } # ---------- Check input file content --------- # Check if any entry contains the separator character ';' # Skip first line $line=;
while( $line= )
{
# Abort if char is found ; because this is our record entry separator character
if ( $line=~ /;/ ) {
print "ERROR: Remove separator char ';' from line $lineNr\n";
close(IN_FILE);
exit;
}
$lineNr++;
}
close(IN_FILE);
print "OK: No separator char ';' found in any entry\n";


# ---------- Start processing ---------
$lineNr= 2;
open(IN_FILE, "<$ARGV[0]"); open(OUT_FILE, ">>$ARGV[1]");

# Skip first line
$line=;
while( $line= )
{
# Remove starting \" from line
$line=~s/^\"//;
# Remove ending \" from line
$line=~s/\"\W*$//s;
# Replace windows CR+LF by the UNIX LF
$line=~s/\\r\\n/\\n/g;
# Split the line into its parts
($type, $title, $user, $pwd, $url, $comment)=split(/","/, $line);
# Translate KeePass types to mSecure types
if ( defined($entryTypeTransLst{$type}) ) {
$type= $entryTypeTransLst{$type};
}
else {
print "INFO: Line $lineNr. No translation defined for KeePass type \"$type\". Translating to \"$UNKNOWN_TYPE\"\n";
$type= $UNKNOWN_TYPE;
}
# Generate / reformat to mSecure format
print OUT_FILE $type.";".$title.";".$comment.";".$url.";".$user.";".$pwd.";\n";
$lineNr++;
}

close(IN_FILE);
close(OUT_FILE);

print "Finished\nLines read: $lineNr\nAppending entries to file: $ARGV[1]\n";

# END OF FILE

No comments :

Post a Comment