加密后密码长度为32位的,可以适合几千万数据不重复的,
相同的加密数据得到的加密结果一样。
求指点。
注:不用MD5,MD5大数据量好象有重复的。谢谢

解决方案 »

  1.   

    除了MD5,想不到好的方法.其他内容可参考:SQL 2005的DES加密算法
    http://topic.csdn.net/u/20100427/20/cb4e75ae-552f-443d-98ee-be1d0ddc0aa3.html?50253CREATE SYMMETRIC KEY key1 WITH ALGORITHM=DES
        ENCRYPTION BY PASSWORD='abc$123'
    GOOPEN SYMMETRIC KEY key1    
        DECRYPTION BY PASSWORD='abc$123'DECLARE @str NVARCHAR(100),@Encrypted VARBINARY(MAX)
    SET @str=N'要加密的字串'    
    SELECT @Encrypted=ENCRYPTBYKEY(KEY_GUID('key1'),@str)
    SELEcT '加密'=@Encrypted ,'解密'=CAST(DECRYPTBYKEY(@Encrypted) AS NVARCHAR(100))
    CLOSE SYMMETRIC KEY key1
    GO
    DROP SYMMETRIC KEY key1
    GOsql2005数据加密
    http://topic.csdn.net/u/20100502/20/c69df313-cd51-4801-8ff4-e8ab48f62d25.html?63821
      

  2.   

    public String kljm(String dm, String kl) { String mw, cmm; int k, i, tmp, a, hf, lf, bytes = 16; int mm[], l, rand_seed; rand_seed = 12345; int len = kl.length(); if (len >= 12)
    len = 12; mw = kl.substring(0, len) + dm.trim(); l = mw.length(); if (bytes > 100)
    bytes = 100; if (l < bytes) { for (l = l; l <= bytes; l++) { rand_seed = (31527 * rand_seed + 3) % 32768; a = rand_seed % 256; if (a < 32 || a > 127)
    a = (int) ('a'); mw = mw + (char) (a); } } mm = new int[100]; for (l = 0; l < 100; l++) mm[l] = 0; for (l = 0; l < bytes; l++) { a = (int) mw.charAt(l); for (i = 1; i <= 8; i++) { if (a >= 128) { a -= 128; for (k = 0; k < bytes; k++) { rand_seed = (31527 * rand_seed + 3) % 32768; mm[k] += rand_seed % 256; } } else { for (k = 1; k <= bytes; k++) rand_seed = (31527 * rand_seed + 3) % 32768; } a *= 2; } } for (k = bytes - 1; k >= 0; k--) { if (k >= 1)
    mm[k - 1] += mm[k] / 256; mm[k] = mm[k] % 256; } cmm = ""; for (k = 0; k < bytes; k++) { hf = mm[k] / 16; if (hf < 10) { cmm = cmm + (char) (hf + (short) ('0')); } else { cmm = cmm + (char) (hf + (short) ('A') - 10); } lf = mm[k] % 16; if (lf < 10) { cmm = cmm + (char) (lf + (short) ('0')); } else { cmm = cmm + (char) (lf + (short) ('A') - 10); } } return cmm; }网上这个方法不知道好用不,大家知道不?
      

  3.   

    相同的加密数据得到的加密结果一样。
    GUID 是不是不可以呀。
      

  4.   

    USE tempdb
    GO-- 建立使用密码加密私钥的非对称密钥
    CREATE ASYMMETRIC KEY ASYM_Test
    WITH
    ALGORITHM = RSA_512
    ENCRYPTION BY PASSWORD = N'abc.124'
    GO-- 加密/解密数据
    SELECT
    Encrypt = ENCRYPTBYASYMKEY(ASYMKEY_ID(N'ASYM_Test'), N'加密'),
    Decrypt = CONVERT(nvarchar(100),
    DECRYPTBYASYMKEY(
    ASYMKEY_ID(N'ASYM_Test'), 
    ENCRYPTBYASYMKEY(ASYMKEY_ID(N'ASYM_Test'), N'解密'),
    N'abc.124'))
    GO-- 删除测试环境
    DROP ASYMMETRIC KEY ASYM_Test
    go
    USE tempdb
    GO-- 创建使用密码加密的对称密钥
    CREATE SYMMETRIC KEY SYM_Test
    WITH 
    ALGORITHM = AES_128
    ENCRYPTION BY
    PASSWORD = N'abc.password_1'-- 添加一个加密对称密钥的密码
    -- 也可以在创建对称密钥时, 在 ENCRYPTION BY 子句中指定两个密码(指定两个 PASSWORD 项)
    OPEN SYMMETRIC KEY SYM_Test
    DECRYPTION BY PASSWORD = N'abc.password_1'ALTER SYMMETRIC KEY SYM_Test
    ADD
    ENCRYPTION BY PASSWORD = N'abc.password_2'
    CLOSE SYMMETRIC KEY SYM_Test
    GO-- 使用对称密钥加密数据
    OPEN SYMMETRIC KEY SYM_Test
    DECRYPTION BY PASSWORD = N'abc.password_1'DECLARE
    @ciphertext varbinary(1000)
    SELECT 
    @ciphertext = ENCRYPTBYKEY(KEY_GUID(N'SYM_Test'), N'测试对称密钥加密')
    CLOSE SYMMETRIC KEY SYM_Test-- 使用另一个密码打开对称密钥进行数据解密
    OPEN SYMMETRIC KEY SYM_Test
    DECRYPTION BY PASSWORD = N'abc.password_2'SELECT 
    CONVERT(nvarchar(10), DECRYPTBYKEY(@ciphertext))
    CLOSE SYMMETRIC KEY SYM_Test
    GO-- 删除测试环境
    DROP SYMMETRIC KEY SYM_Test
      

  5.   

    加密方法太多不用SQL自身的,也可自己写一个
    教你怎樣實現SQL密文加密,不可反編譯
    http://blog.csdn.net/roy_88/article/details/4801917
      

  6.   

    顶,有没有JAVA的呀,加完密是32位的不??
      

  7.   

    AES