2015-05-19 66 views
3

我想添加一些代碼到我的程序來加密我使用的sqlite數據庫。我試圖提示用戶輸入密碼,並使用該密碼創建新的加密數據庫(如果它不存在),或者解密並加載現有的數據庫。這似乎並不是我可以找到的大量文件,我不知道如何做到這一點。我的代碼如下:與SqlAlchemy一起使用pysqlcipher?

if encryption is True: 
    print("***PYPER TIMESHEET UTILITY***") 
    print("\nEnter encryption password below:") 
    key = getpass.getpass() 
    DB_NAME = ".timesheet.db" 
    engine = create_engine('sqlite:///{}'.format(DB_NAME), module=sqlite) 

else: 

    print("WARNING: Unencrypted session. Install pysqlcipher3 to enable encryption\n") 
    DB_NAME = ".timesheet.db?cipher=aes-256-cfb&kdf_iter=64000" 
    engine = create_engine('sqlite:///{}'.format(DB_NAME)) 
    DBSession = sessionmaker(bind=engine) 
    session = DBSession() 

編輯:忘了給一些更多的信息。我試過what's listed at sqlalchemy。在上面的例子中,我意識到我留下了一個重要的線,

from pysqlcipher import dbapi 2 as sqlite 

Link to full code

+0

你嘗試了什麼?它是如何失敗的?不要指望這是免費的Rent-A-Coder。 – knitti

+0

我不會 - 這只是一個個人學習項目,我感到沮喪。 我更新了更多信息的帖子。 「不起作用」的 –

+0

根本沒有任何信息。它如何失敗?你期望什麼行爲?你得到了什麼? – knitti

回答

2

您忘了把鑰匙插進你的數據庫連接,作爲例子說:

'sqlite+pysqlcipher://:[email protected]/foo.db?cipher=aes-256-cfb&kdf_iter=64000' 

(示例中的密鑰爲"testing"),因此在獲得key後試試:

engine = create_engine(
    'sqlite+pysqlcipher://:{0}@/{1}?' 
    'cipher=aes-256-cfb&kdf_iter=64000'.format(key, DB_NAME)) 
+0

謝謝,@ knitti ..我不想讓你們爲我做這件事。我只是想要一點點推動。那麼,在'[email protected]/foo.db'中,@部分是關鍵嗎?我沒有意識到這一點。我不善於SQL,所以我錯過了。 –

+0

我看到了,否則我會投票決定結束這個問題。 – knitti

+0

運行,創建數據庫但無法查詢數據庫。我會接受這個答案,看看我能否找出我在查詢中缺少的內容。謝謝你的幫助! (不能獎勵賞金,直到明天) –