【问题标题】:How can i encrypt particular column data in Android SQLite Data base.Using SQLCipher utility我如何加密 Android SQLite 数据库中的特定列数据。使用 SQLCipher 实用程序
【发布时间】:2015-08-06 12:35:48
【问题描述】:

我在 android 中有一个 SQLite DB,我只想加密该 DB 中的几列。我发现它可以与整个数据库一起加密,但我只需要加密几列数据。

【问题讨论】:

    标签: android database encryption sqliteopenhelper sqlcipher


    【解决方案1】:

    你可以使用这个类来加密和解密你的数据:

    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    import android.util.Base64;
    
    public class SimpleCrypto {
    
        private String charsetName = "UTF8";
        private String algorithm = "DES";
        private int base64Mode = Base64.DEFAULT;
    
        public String getCharsetName() {
            return charsetName;
        }
    
        public void setCharsetName(String charsetName) {
            this.charsetName = charsetName;
        }
    
        public String getAlgorithm() {
            return algorithm;
        }
    
        public void setAlgorithm(String algorithm) {
            this.algorithm = algorithm;
        }
    
        public int getBase64Mode() {
            return base64Mode;
        }
    
        public void setBase64Mode(int base64Mode) {
            this.base64Mode = base64Mode;
        }
    
        public String encrypt(String key, String data) {
            if (key == null || data == null)
                return null;
            try {
                DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(charsetName));
                SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(algorithm);
                SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
                byte[] dataBytes = data.getBytes(charsetName);
                Cipher cipher = Cipher.getInstance(algorithm);
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
                return Base64.encodeToString(cipher.doFinal(dataBytes), base64Mode);
            } catch (Exception e) {
                return null;
            }
        }
    
        public String decrypt(String key, String data) {
            if (key == null || data == null)
                return null;
            try {
                byte[] dataBytes = Base64.decode(data, base64Mode);
                DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(charsetName));
                SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(algorithm);
                SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
                Cipher cipher = Cipher.getInstance(algorithm);
                cipher.init(Cipher.DECRYPT_MODE, secretKey);
                byte[] dataBytesDecrypted = (cipher.doFinal(dataBytes));
                return new String(dataBytesDecrypted);
            } catch (Exception e) {
                return null;
            }
        }
    }
    

    您可以像这样加密您的数据:

    private SimpleCrypto simpleCrypto = new SimpleCrypto();
    
    String MasterPassword = "qssfFs32fFwada";
    
    String encryptedText = simpleCrypto.encrypt(MasterPassword, "Hello World");
    Log.i(encryptedText, encryptedText);
    

    然后你可以像这样解密它们:

    String decryptedText = decrypt(MasterPassword, encryptedText);
    Log.i(decryptedText, decryptedText);
    

    【讨论】:

      【解决方案2】:

      您不能使用 SQLCipher 执行此操作。 SQLCipher 加密数据库的全部内容,包括模式和数据。如果您仍然对在您的 Android 应用程序中使用 SQLCipher 感兴趣,我们有一个集成教程here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 2017-06-26
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多