Android-加密解密应用数据库

怎么样确保数据库文件使用加密算法后不会被修改。

我用了硬编码关键字再反编译,但是还是可以访问。如果root设备用户就能随便阅读了。

怎么能让用户无法访问和阅读我的数据库。谢谢。

1个回答

package com.kushal.utils;

    import java.security.spec.KeySpec;
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESedeKeySpec;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;

    public class DESedeEncryption {

        private static final String UNICODE_FORMAT = "UTF8";
        public static final String DESEDE_ENCRYPTION_SCHEME = "DESede";
        private KeySpec myKeySpec;
        private SecretKeyFactory mySecretKeyFactory;
        private Cipher cipher;
        byte[] keyAsBytes;
        private String myEncryptionKey;
        private String myEncryptionScheme;
        SecretKey key;

        public DESedeEncryption() throws Exception
        {
            myEncryptionKey = "ThisIsSecretEncryptionKey";
            myEncryptionScheme = DESEDE_ENCRYPTION_SCHEME;
            keyAsBytes = myEncryptionKey.getBytes(UNICODE_FORMAT);
            myKeySpec = new DESedeKeySpec(keyAsBytes);
            mySecretKeyFactory = SecretKeyFactory.getInstance(myEncryptionScheme);
            cipher = Cipher.getInstance(myEncryptionScheme);
            key = mySecretKeyFactory.generateSecret(myKeySpec);
        }

        /**
         * Method To Encrypt The String
         */
        public String encrypt(String unencryptedString) {
            String encryptedString = null;
            try {
                cipher.init(Cipher.ENCRYPT_MODE, key);
                byte[] plainText = unencryptedString.getBytes(UNICODE_FORMAT);
                byte[] encryptedText = cipher.doFinal(plainText);
                BASE64Encoder base64encoder = new BASE64Encoder();
                encryptedString = base64encoder.encode(encryptedText);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return encryptedString;
        }
        /**
         * Method To Decrypt An Ecrypted String
         */
        public String decrypt(String encryptedString) {
            String decryptedText=null;
            try {
                cipher.init(Cipher.DECRYPT_MODE, key);
                BASE64Decoder base64decoder = new BASE64Decoder();
                byte[] encryptedText = base64decoder.decodeBuffer(encryptedString);
                byte[] plainText = cipher.doFinal(encryptedText);
                decryptedText= bytes2String(plainText);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return decryptedText;
        }
        /**
         * Returns String From An Array Of Bytes
         */
        private static String bytes2String(byte[] bytes) {
            StringBuffer stringBuffer = new StringBuffer();
            for (int i = 0; i < bytes.length; i++) {
                stringBuffer.append((char) bytes[i]);
            }
            return stringBuffer.toString();
        }

        /**
         * Testing The DESede Encryption And Decryption Technique
         */
        public static void main(String args []) throws Exception
        {
            DESedeEncryption myEncryptor= new DESedeEncryption();
            String stringToEncrypt="Sanjaal.com";
            String encrypted=myEncryptor.encrypt(stringToEncrypt);
            String decrypted=myEncryptor.decrypt(encrypted);
            System.out.println("String To Encrypt: "+stringToEncrypt);
            System.out.println("Encrypted Value :" + encrypted);
            System.out.println("Decrypted Value :"+decrypted);
        }
    }
output:
String To Encrypt: Sanjaal.com
Encrypted Value :aArhqI25Y1SkYrdv9gxYDQ==
Decrypted Value :Sanjaal.com

http://sanjaal.com/java/189/java-encryption/tutorial-encryption-and-decryption-using-desede-triple-des-in-java/
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
iOS-网络请求-加密解密

采用AES解密,但是问题是用于加密解密的key硬编码方式宏定义在了代码中,如何改进?不让key显示出现在代码中

Android文件加密:加密解密出来文件打开有误。

使用CipherInputStream,CipherOutputStream对文件进行加密解密,对于jpg,tex,pdf文档都可以正常显示,但是对png,apk文件解密出来的文件打开不了,png提示没有缩略图,apk提示解析压缩包有误。所有加密解密文件大小基本没大的变化。

Android和PHP加密/解密 - 填充问题

<div class="post-text" itemprop="text"> <p>Used code on iOS fine and trying to translate code to Android we have the following however seem to have a padding issue, can anyone offer a hand.</p> <p>Using a MD5 as key</p> <p><strong>Java (Android)</strong></p> <pre><code>public class AES256Cipher { public static byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; public static String AES_Encode(String str, String key) throws java.io.UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { byte[] textBytes = str.getBytes("UTF-8"); AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes); SecretKeySpec newKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = null; cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec); return Base64.encodeToString(cipher.doFinal(textBytes), 0); } public static String AES_Decode(String str, String key) throws java.io.UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { byte[] textBytes =Base64.decode(str,0); //byte[] textBytes = str.getBytes("UTF-8"); AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes); SecretKeySpec newKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec); return new String(cipher.doFinal(textBytes), "UTF-8"); } } </code></pre> <p><strong>PHP</strong> </p> <pre><code>&lt;?php function encrypt ($key, $value) { $padSize = 16 - (strlen ($value) % 16) ; $value = $value . str_repeat (chr ($padSize), $padSize) ; $output = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $value, MCRYPT_MODE_CBC, str_repeat(chr(0),16)) ; return base64_encode ($output) ; } function decrypt ($key, $value) { $value = base64_decode ($value) ; $output = mcrypt_decrypt (MCRYPT_RIJNDAEL_128, $key, $value, MCRYPT_MODE_CBC, str_repeat(chr(0),16)) ; $valueLen = strlen ($output) ; if ( $valueLen % 16 &gt; 0 ) $output = ""; $padSize = ord ($output{$valueLen - 1}) ; if ( ($padSize &lt; 1) or ($padSize &gt; 16) ) $output = ""; // Check padding. for ($i = 0; $i &lt; $padSize; $i++) { if ( ord ($output{$valueLen - $i - 1}) != $padSize ) $output = ""; } $output = substr ($output, 0, $valueLen - $padSize) ; return $output; } ?&gt; </code></pre> <p>The output on Java side works fine however when the code is send to PHP you get an output with remainder which makes us think its a padding issue, any help would be great.</p> </div>

PHP AES加密 - 无法解密存储在数据库中的某些值

<div class="post-text" itemprop="text"> <p>I'm using <a href="http://www.phpaes.com/" rel="nofollow">http://www.phpaes.com/</a> to encrypt some values and store them in a MySQL database. The column type for the database is VARBINARY(512) which is the only one that seemed to work. </p> <p>The values (plain text) are strings not longer than 128 chars but as this is my first take on something more serious than plain md5 or such I do think I'm doing something very bad here. First of all, the initialization vector is always the same, but this really isn't a concern for this project. </p> <p>Problem is, when I decrypt the values, some values come out ok while other's not. Any idea what could the problem be here?</p> <p>I'm using OFB cypher mode, 256 bit key and the values are email addresses and phone numbers.</p> <p>Any help would be much appreciated.</p> <p>Thanks</p> </div>

基于Android的图像加密:加密后存储的jpg图片进行解密时获得的像素值与加密存储时不一致

最近在做一个简单的图像加密app,利用了Arnold变换、混沌映射和异或扩散的技术。我对这方面十分陌生。。。 加密后获得了一个一维数组,里面存储ARGB像素值,用setPixels生成位图后存储在手机里。 将手机里加密后的图像进行解密时,用getPixel方法读取其ARGB像素值,也存储在一个一维数组中,发现这两个数组里面内容不同。 按说这两个数组里内容应该是一样,生成存储后接着读取,不明白为什么不一致。 下面附代码。 加密后存储: ``` public Bitmap toNewRGB(){ int[] cache_passage = new int[length]; int n = (int)sqrt(length); for(int i = 0;i < length;i++){ cache_passage[i] = (a_passage[i] << 24) | (r_passage[i] << 16) | (g_passage[i] << 8) | (b_passage[i]);//获取ARGB } finalBitmap = Bitmap.createBitmap(n, n, Bitmap.Config.ARGB_8888); finalBitmap.setPixels(cache_passage, 0, n, 0, 0, n, n); return finalBitmap; } } ``` 解密时读取: ``` /** * 获取图像RGB一维数组 * @param image * @return */ public int[] getSeqRGB(Bitmap image) { int[] imageSeq = new int[N * N]; for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ imageSeq[i * N + j] = image.getPixel(j,i); } } //image.getPixels(imageMatrix, 0, N, 0, 0, N, N); return imageSeq; } ``` 感谢解答。

Android AES加密后无法解密 求大神指导

package com.example.aes; import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; /** * AES加密解密算法 */ public class AESHelper { /** 算法/模式/填充 **/ private static final String CipherMode = "AES/CBC/PKCS5Padding"; /** 创建密钥 **/ private static SecretKeySpec createKey(String key) { byte[] data = null; if (key == null) { key = ""; } StringBuffer sb = new StringBuffer(16); sb.append(key); while (sb.length() < 16) { sb.append("0"); } if (sb.length() > 16) { sb.setLength(16); } try { data = sb.toString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return new SecretKeySpec(data, "AES"); } private static IvParameterSpec createIV(String password) { byte[] data = null; if (password == null) { password = ""; } StringBuffer sb = new StringBuffer(16); sb.append(password); while (sb.length() < 16) { sb.append("0"); } if (sb.length() > 16) { sb.setLength(16); } try { data = sb.toString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return new IvParameterSpec(data); } /** 加密字节数据 **/ public static byte[] encrypt(byte[] content, String password, String iv) { try { SecretKeySpec key = createKey(password); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init(Cipher.ENCRYPT_MODE, key, createIV(iv)); byte[] result = cipher.doFinal(content); return result; } catch (Exception e) { e.printStackTrace(); } return null; } /** 加密(结果为16进制字符串) **/ public static String encrypt(String content, String password, String iv) { byte[] data = null; try { data = content.getBytes("UTF-8"); } catch (Exception e) { e.printStackTrace(); } data = encrypt(data, password, iv); String result = byte2hex(data); return result; } /** 解密字节数组 **/ public static byte[] decrypt(byte[] content, String password, String iv) { try { SecretKeySpec key = createKey(password); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init(Cipher.DECRYPT_MODE, key, createIV(iv)); byte[] result = cipher.doFinal(content); return result; } catch (Exception e) { e.printStackTrace(); } return null; } /** 解密(输出结果为字符串) **/ public static String decrypt(String content, String password, String iv) { byte[] data = null; try { data = hex2byte(content); } catch (Exception e) { e.printStackTrace(); } data = decrypt(data, password, iv); if (data == null) return null; String result = null; try { result = new String(data, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } /** 字节数组转成16进制字符串 **/ public static String byte2hex(byte[] b) { // 一个字节的数, StringBuffer sb = new StringBuffer(b.length * 2); String tmp = ""; for (int n = 0; n < b.length; n++) { // 整数转成十六进制表示 tmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (tmp.length() == 1) { sb.append("0"); } sb.append(tmp); } return sb.toString().toUpperCase(); // 转成大写 } /** 将hex字符串转换成字节数组 **/ private static byte[] hex2byte(String inputString) { if (inputString == null || inputString.length() < 2) { return new byte[0]; } inputString = inputString.toLowerCase(); int l = inputString.length() / 2; byte[] result = new byte[l]; for (int i = 0; i < l; ++i) { String tmp = inputString.substring(2 * i, 2 * i + 2); result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF); } return result; } } ------------------------------------------------------------ public class MainActivity extends Activity implements OnClickListener { private Button mJiami, mJiemi; private EditText mName; private String KEY="fe8f95cb0f968676572ab9f46d8a261b"; private String IV ="0F968676572AB9F4"; private String name; String aes; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView(); } private void initView() { mName = (EditText) findViewById(R.id.editText1); name = mName.getText().toString().trim(); mJiami = (Button) findViewById(R.id.button1); mJiemi = (Button) findViewById(R.id.button2); mJiami.setOnClickListener(this); mJiemi.setOnClickListener(this); } @Override public void onClick(View v) { String help = null; switch (v.getId()) { case R.id.button1: try { aes = AESHelper.encrypt(name, KEY, IV); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Toast.makeText(this, "加密后值为:"+aes, 0).show(); break; case R.id.button2: try { help = AESHelper.decrypt(aes, KEY, IV); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if(help.length()==0){ Toast.makeText(this, "解密失败!", 0).show(); }else{ Toast.makeText(this, help, 0).show(); } break; default: break; } } }

Android AES加密zip文件问题

我使用android系统提供的AES加密音频,视频,然后解密可以打开,但是加密zip文件后解密不能打开,是什么原因?

Java编写数字加密解密

/* 整数加密/解密算法 设置一套针对非负整数的加密,解密算法 例如: 一个简单的映射算法,0->a,1->b, 2->c, 3->d, 4->e,5->f, 6->g, 7->h, 8->i,9->j encode(2756)->”chfg” decode(“bcea”)->1240 加分项:实现示例之外的其他加密/解密算法 //number>=0 public String encode(int number); public int decode(String numberStr); */

从PHP到Golang的aes-256-gcm解密

<div class="post-text" itemprop="text"> <p>I have an encryption function that I use in PHP</p> <pre><code>function Encrypt(?string $Content, string $Key): string { return openssl_encrypt($Content, 'aes-256-gcm', $Key, OPENSSL_RAW_DATA, $IV = random_bytes(16), $Tag, '', 16) . $IV . $Tag; } </code></pre> <p>Paired with a decryption function</p> <pre><code>function Decrypt(?string $Ciphertext, string $Key): ?string { if (strlen($Ciphertext) &lt; 32) return null; $Content = substr($Ciphertext, 0, -32); $IV = substr($Ciphertext, -32, -16); $Tag = substr($Ciphertext, -16); try { return openssl_decrypt($Content, 'aes-256-gcm', $Key, OPENSSL_RAW_DATA, $IV, $Tag); } catch (Exception $e) { return null; } } </code></pre> <p>I store data encrypted from the encryption function into my db, and now I'm trying to decrypt those same values in Go, but I'm getting <code>cipher: message authentication failed</code> and I can't figure out what I'm missing.</p> <pre><code>c := []byte(`encrypted bytes of sorts`) // the bytes from the db content := c[:len(c)-32] iv := c[len(c)-32 : len(c)-16] tag := c[len(c)-16:] block, err := aes.NewCipher(key[:32]) if err != nil { panic(err.Error()) } aesgcm, err := cipher.NewGCMWithNonceSize(block, 16) if err != nil { panic(err.Error()) } fmt.Println(aesgcm.NonceSize(), aesgcm.Overhead()) // making sure iv and tag are both 16 bytes plaintext, err := aesgcm.Open(nil, iv, append(content, tag...), nil) if err != nil { panic(err.Error()) } </code></pre> <p>It's worth noting that the key I'm using isn't 32 bytes (it's way bigger), as I didn't know the key needed/should be 32 bytes, so I'm not entirely sure what PHP is doing with it (as in truncating it to 32 vs hashing it with something having 32 bytes of output vs some other thing).</p> <p>Looking at the <code>Open</code> function from the Go source, it looks like the tag should be the last "tag size" bytes of the text, so that's why I'm appending the tag to the ciphertext after parsing the pieces.</p> <pre><code>// copied from C:\Go\src\crypto\cipher\gcm.go, Go version 1.11 func (g *gcm) Open(dst, nonce, ciphertext, data []byte) ([]byte, error) { if len(nonce) != g.nonceSize { panic("cipher: incorrect nonce length given to GCM") } if len(ciphertext) &lt; gcmTagSize { return nil, errOpen } if uint64(len(ciphertext)) &gt; ((1&lt;&lt;32)-2)*uint64(g.cipher.BlockSize())+gcmTagSize { return nil, errOpen } tag := ciphertext[len(ciphertext)-gcmTagSize:] ciphertext = ciphertext[:len(ciphertext)-gcmTagSize] var counter, tagMask [gcmBlockSize]byte g.deriveCounter(&amp;counter, nonce) g.cipher.Encrypt(tagMask[:], counter[:]) gcmInc32(&amp;counter) var expectedTag [gcmTagSize]byte g.auth(expectedTag[:], ciphertext, data, &amp;tagMask) ret, out := sliceForAppend(dst, len(ciphertext)) if subtle.ConstantTimeCompare(expectedTag[:], tag) != 1 { // The AESNI code decrypts and authenticates concurrently, and // so overwrites dst in the event of a tag mismatch. That // behavior is mimicked here in order to be consistent across // platforms. for i := range out { out[i] = 0 } return nil, errOpen } g.counterCrypt(out, ciphertext, &amp;counter) return ret, nil } </code></pre> <hr> <p>PHP example using the functions above</p> <pre><code>$Key = 'outspoken outburst treading cramp cringing'; echo bin2hex($Enc = Encrypt('yeet', $Key)), '&lt;br&gt;'; // 924b3ba418f49edc1757f3fe88adcaa7ec4c1e7d15811fd0b712b0b091433073f6a38d7b var_export(Decrypt($Enc, $Key)); // 'yeet' </code></pre> <p>Go</p> <pre><code>c, err := hex.DecodeString(`924b3ba418f49edc1757f3fe88adcaa7ec4c1e7d15811fd0b712b0b091433073f6a38d7b`) if err != nil { panic(err.Error()) } key := []byte(`outspoken outburst treading cramp cringing`) content := c[:len(c)-32] iv := c[len(c)-32 : len(c)-16] tag := c[len(c)-16:] block, err := aes.NewCipher(key[:32]) if err != nil { panic(err.Error()) } aesgcm, err := cipher.NewGCMWithNonceSize(block, 16) if err != nil { panic(err.Error()) } ciphertext := append(content, tag...) // or `ciphertext := content`, same error plaintext, err := aesgcm.Open(nil, iv, ciphertext, nil) if err != nil { panic(err.Error()) // panic: cipher: message authentication failed } </code></pre> </div>

PHP AES 128位加密/解密

<div class="post-text" itemprop="text"> <p>I'm trying to understand how to AES encrypt a piece of text(16 bytes - 128 bits). This code is from <a href="http://php.net/manual/ro/function.openssl-encrypt.php" rel="nofollow noreferrer">php manual</a>:</p> <pre><code>$key = openssl_random_pseudo_bytes(32); $plaintext = "message to be encrypted"; $cipher = "aes-128-gcm"; if (in_array($cipher, openssl_get_cipher_methods())) { $ivlen = openssl_cipher_iv_length($cipher); $iv = openssl_random_pseudo_bytes($ivlen); $ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag); //store $cipher, $iv, and $tag for decryption later $original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag); echo $original_plaintext." "; } </code></pre> <p>The only problem with this is that i don't really understand it. <code>$cipher</code> is <code>aes-128-gcm</code> but i'm getting a 32 bytes encryption. </p> <p>So my questions are: Can somebody help me understand how it actually works?</p> <p>Is it possible to make it 16 bytes/128 bites?</p> <p>And is it safe to store <code>$cipher</code>, <code>$iv</code>, <code>$key</code> and <code>$tag</code> into a MySQL database for later use? </p> <p>P.S: if i change <code>$key</code> length to <code>16</code> instead of <code>32</code> the final output of <code>$ciphertext</code> is still 32 bytes.</p> <p>Thank you!</p> </div>

Android MPEG-4视频解密

服务器上的视频别人用算法加密过,已经知道算法,在手机播放需要解密,视频数据需要解密后才能播放,怎么操作,我想知道有算法怎么解密这个视频。

安卓中怎么播放一个本地的被加密的视频文件?

新手...我在做一个Android文件加密的工具,加密和解密都已经做好了,还差一个预览的功能,就是假如加密的是一个视频文件,怎么可以在边得到一个解密过的字节数组边将它播放出去? 比如这样: ``` FileInputStream fis=new FileInputStream(.......); byte[] b=new byte[1024]; int len=0; while(-1!=(len=fis.read(b))){ b=........//进行解密算法 //传输给视频控件播放? } ```

C#加密 android解密 android没法解密

请问各位大神,刚接触加密解密现遇到一个问题,需要用C#加密然后传给android端解密,我现在用的是AES加密,密钥是根据双方约定的字符串,例如用户名这种,但每次C#加密后在android端都没法解密,我查了一下应该密钥的原因,想问问有木有其他办法来解决这个问题,谢谢!

android本地文件加密该如何设计

最近遇到一个把本地文件加密的问题,不知道该如何解决.求各位大神给思路... 用对称加密,首先可破解不说,他解密后生成的临时文件也会被人看到,不安全. 也想过在文件头写点自己知道的东西,最后自己读的时候去掉,或者非对称加密,但是都要生成解密后真正可读的临时文件,临时文件就是个不安全的隐患,想过直接去读解密后放在内存里的字节数组,但是因为加密文件可能要给第三方应用读取,所以还是得生成个解密后真正可读的临时文件,这个临时文件该怎么放才会更安全?求大神们给本地文件加密的思路

Java AES-256加密文件之后解密文件,文件被损坏

public static Cipher initAESCipher(String password, int cipherMode) { // 创建Key gen KeyGenerator keyGenerator = null; Cipher cipher = null; try { keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256, new SecureRandom(password.getBytes())); SecretKey secretKey = keyGenerator.generateKey(); byte[] codeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(codeFormat, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS7Padding","BC"); // 初始化 cipher.init(cipherMode, key); return cipher; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchPaddingException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (InvalidKeyException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } ``` ``` public static void encrypt(File source, File target, String password) throws Exception { InputStream input = new FileInputStream(source); OutputStream ouput = new FileOutputStream(target); logger.debug("开始写入加密文件"); long start = System.currentTimeMillis(); CipherInputStream cipherInputStream = (CipherInputStream) encrypt(input, password); IOUtils.copy(cipherInputStream,ouput ); cipherInputStream.close(); input.close(); ouput.close(); logger.debug("完成文件加密,耗时:" + (System.currentTimeMillis() - start)); } ``` ``` public static InputStream encrypt(InputStream input, String password) { logger.debug("开始加密文件流"); long start = System.currentTimeMillis(); Cipher cipher = initAESCipher(password, Cipher.ENCRYPT_MODE); logger.debug("生成密钥耗时:" + (System.currentTimeMillis() - start)); Assert.notNull(cipher); // 以加密流写入文件 CipherInputStream cipherInputStream = new CipherInputStream(input, cipher); logger.debug("完成加密文件流,耗时:" + (System.currentTimeMillis() - start)); return cipherInputStream; } ``` ``` 目前发现加密DOCX,PPTX,ZIP等压缩类文件之后进行解密会产生头信息被损坏的现象,望各位大神提供下解决思路。

hibernate配置文件中数据库密码加密

求大神支招啊。。。 **这是的hibernate.xml** <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> <!-- c3lzdGVt cGFuaGFv --> <property name="connection.username">c3lzdGVt</property> <property name="connection.password">cGFuaGFv</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="myeclipse.connection.profile">a</property> <mapping resource="pojo/Nametable.hbm.xml" /> </session-factory> </hibernate-configuration> **这是的Sessionfactory里面加载hibernate.xml的部分** static { try { configuration.configure(configFile); //得到hibernate配置文件中的密码 String password = configuration.getProperty("connection.password"); System.out.println("//-配置文件中password:"+password); //调用密钥解密 String keyword = SimpleDESCrypto.APPOINT_KEY_WORD; //先用base64解码 byte[] data = SimpleDESCrypto.decodeByBase64(password); //decrypt解密 String realPassword = new String(SimpleDESCrypto.decrypt(keyword, data)); System.out.println("//---解密后的密码-------realPassword:"+realPassword); //将解密后的密码设置到hibernate配置文件中 configuration.setProperty("connection.password", realPassword); String pass=configuration.getProperty("connection.password"); System.out.println("从配置文件中得到的密码"+pass); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } 可以得到加密后的密码,然后解密,也可以解出来,再设置到hibernate中的时候就设置不进去了。不知道是什么原因,帮帮忙呀。谢谢。

怎样实现加密狗信息录入数据库

我现在想用深思的加密狗完成将加密狗中的信息录入到数据库mysql中,但不清楚代码怎么实现,求教求教.

有什么加密解密方法,在sql和java代码中都能使用的。

最近要做的一个需求是在已经做好的一个项目中,对某些表的某些字段的更新和查询进行加密解密操作,这些操作在存储过程和java代码都有。有没有一种加密解密方法在sql和java中都能使用的。

spring配置连接池,数据库密码加密问题

以下方式配置数据库连接池,使用没问题。 现在我想利用RSA算法加密数据库密码“1234”,不知应该做。谢谢! [code="java"] <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.ncr.teradata.TeraDriver" /> <property name="url" value="jdbc:teradata://IP地址/CLIENT_CHARSET=cp936,TMODE=TERA,CHARSET=ASCII,LOB_SUPPORT=off,database=数据库名" /> <property name="username" value="xx" /> <property name="password" value="1234" /> </bean> <bean id="dbConn" class="yxkh.common.TeradataConnection"> <property name="dataSource" ref="dataSource" /> </bean> [/code] [code="java"] package yxkh.common; import java.sql.Connection; public interface DatabaseConnection { public Connection getConnection(); } [/code] [code="java"] package yxkh.common; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class TeradataConnection implements DatabaseConnection { private static Log log = LogFactory.getLog(TeradataConnection.class); private DataSource dataSource; public TeradataConnection() {} public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public DataSource getDataSource() { return dataSource; } @Override public Connection getConnection() { Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { log.error("连接数据库失败", e); } return conn; } } [/code] 使用代码 [code="java"] ApplicationContext ctx = new ClassPathXmlApplicationContext("dataAccessContext.xml"); DatabaseConnection db = (DatabaseConnection) ctx.getBean("dbConn"); ... [/code]

软件测试入门、SQL、性能测试、测试管理工具

软件测试2小时入门,让您快速了解软件测试基本知识,有系统的了解; SQL一小时,让您快速理解和掌握SQL基本语法 jmeter性能测试 ,让您快速了解主流来源性能测试工具jmeter 测试管理工具-禅道,让您快速学会禅道的使用,学会测试项目、用例、缺陷的管理、

计算机组成原理实验教程

西北工业大学计算机组成原理实验课唐都仪器实验帮助,同实验指导书。分为运算器,存储器,控制器,模型计算机,输入输出系统5个章节

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

winfrom中嵌套html,跟html的交互

winfrom中嵌套html,跟html的交互,源码就在里面一看就懂,很简单

玩转Python-Python3基础入门

总课时80+,提供源码和相关资料 本课程从Python零基础到纯Python项目实战。内容详细,案例丰富,覆盖了Python知识的方方面面,学完后不仅对Python知识有个系统化的了解,让你从Python小白变编程大牛! 课程包含: 1.python安装 2.变量、数据类型和运算符 3.选择结构 4.循环结构 5.函数和模块 6.文件读写 7.了解面向对象 8.异常处理

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:itxy41)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

基于VHDL的16位ALU简易设计

基于VHDL的16位ALU简易设计,可完成基本的加减、带进位加减、或、与等运算。

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

利用Verilog实现数字秒表(基本逻辑设计分频器练习)

设置复位开关。当按下复位开关时,秒表清零并做好计时准备。在任何情况下只要按下复位开关,秒表都要无条件地进行复位操作,即使是在计时过程中也要无条件地进行清零操作。 设置启/停开关。当按下启/停开关后,将

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

计算机操作系统 第三版.pdf

计算机操作系统 第三版 本书全面介绍了计算机系统中的一个重要软件——操作系统(OS),本书是第三版,对2001年出版的修订版的各章内容均作了较多的修改,基本上能反映当前操作系统发展的现状,但章节名称基

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

SEIR课程设计源码与相关城市数据.rar

SEIR结合学报与之前博客结合所做的一些改进,选择其中三个城市进行拟合仿真SEIR结合学报与之前博客结合所做的一些改进,选择其中三个城市进行拟合仿真SEIR结合学报与之前博客结合所做的一些改进,选择其

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

GIS程序设计教程 基于ArcGIS Engine的C#开发实例

张丰,杜震洪,刘仁义编著.GIS程序设计教程 基于ArcGIS Engine的C#开发实例.浙江大学出版社,2012.05

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

去除异常值matlab程序

数据预处理中去除异常值的程序,matlab写成

用verilog HDL语言编写的秒表

在秒表设计中,分模块书写。用在七段数码管上显示。输入频率是1KHZ.可以显示百分秒,秒,分。如要显示小时,只需修改leds里的代码和主模块代码。改程序以通过硬件电路验证。完全正确。

[透视java——反编译、修补和逆向工程技术]源代码

源代码。

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐