用什么加密算法好呢?

魔都 2011-10-27 08:25:47
加密后密码长度为32位的,可以适合几千万数据不重复的,
相同的加密数据得到的加密结果一样。
求指点。
注:不用MD5,MD5大数据量好象有重复的。谢谢
...全文
324 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
魔都 2011-10-28
  • 打赏
  • 举报
回复
顶,有没有JAVA的呀,加完密是32位的不??
q465897859 2011-10-28
  • 打赏
  • 举报
回复
不懂 帮顶
gold_water 2011-10-28
  • 打赏
  • 举报
回复
AES
魔都 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 qianjin036a 的回复:]
引用 17 楼 wangjian223344 的回复:
是这样的,这个字段是主键,所以不能重复。所以。。。。


呵呵....原来是这样.
把加密的字段作主键,到是有点儿创意,不过,你这个主键用来干嘛呢,一般说来,主键是用来作为一对多中的一方作设置参照完整性的,另一方面是用来作索引使查询加速用的,但你一旦加了密,这两个作用就都不能用了,那这个主键还能干嘛呢?
[/Quote]

是这样的,由于我们需要拿关键字组声成主键,关键字组合可能是一个关键字,二个关键字,也可能是多个关键字,所以为了保证不重复没办法就先选择了MD5了。总是这个关键字非常的多,所以没什么好办法。
-晴天 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wangjian223344 的回复:]
是这样的,这个字段是主键,所以不能重复。所以。。。。
[/Quote]

呵呵....原来是这样.
把加密的字段作主键,到是有点儿创意,不过,你这个主键用来干嘛呢,一般说来,主键是用来作为一对多中的一方作设置参照完整性的,另一方面是用来作索引使查询加速用的,但你一旦加了密,这两个作用就都不能用了,那这个主键还能干嘛呢?
魔都 2011-10-28
  • 打赏
  • 举报
回复
是这样的,这个字段是主键,所以不能重复。所以。。。。
-晴天 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wangjian223344 的回复:]
我发现千万数据MD5的重复是千亿分之一,所以可以不用换了。谢谢大家的帮忙。
[/Quote]
MD5 加密即使重复也不要紧,因为,它不能解密,只能对比,所以,当你的密码与别人的密码相同时,你根本就不知道.除非你是数据库管理员.
魔都 2011-10-28
  • 打赏
  • 举报
回复
我发现千万数据MD5的重复是千亿分之一,所以可以不用换了。谢谢大家的帮忙。
中国风 2011-10-27
  • 打赏
  • 举报
回复
加密方法太多

不用SQL自身的,也可自己写一个
教你怎樣實現SQL密文加密,不可反編譯
http://blog.csdn.net/roy_88/article/details/4801917
中国风 2011-10-27
  • 打赏
  • 举报
回复
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
魔都 2011-10-27
  • 打赏
  • 举报
回复
相同的加密数据得到的加密结果一样。
GUID 是不是不可以呀。
魔都 2011-10-27
  • 打赏
  • 举报
回复
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;

}

网上这个方法不知道好用不,大家知道不?
--小F-- 2011-10-27
  • 打赏
  • 举报
回复
利用GUID 呢?
魔都 2011-10-27
  • 打赏
  • 举报
回复
自己再顶一下。
魔都 2011-10-27
  • 打赏
  • 举报
回复
我先看看谢谢,
快溜 2011-10-27
  • 打赏
  • 举报
回复
用程序处理加密。
dawugui 2011-10-27
  • 打赏
  • 举报
回复
除了MD5,想不到好的方法.

其他内容可参考:

SQL 2005的DES加密算法
http://topic.csdn.net/u/20100427/20/cb4e75ae-552f-443d-98ee-be1d0ddc0aa3.html?50253

CREATE SYMMETRIC KEY key1 WITH ALGORITHM=DES
ENCRYPTION BY PASSWORD='abc$123'
GO

OPEN 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
GO


sql2005数据加密
http://topic.csdn.net/u/20100502/20/c69df313-cd51-4801-8ff4-e8ab48f62d25.html?63821
魔都 2011-10-27
  • 打赏
  • 举报
回复
只能32位已经定死了。能推荐一下不。
-晴天 2011-10-27
  • 打赏
  • 举报
回复
md5 把位数加长,重复率就少了.

加密的算法太多了,关键是楼主会哪些,按你会的做就是了.
【课程介绍】     课程目标:             - 有状态登录和无状态登录的区别             - 常见的非对称加密算法和非对称的加密方式             - 老版本只使用jwt进行加密的弊端             - 授权中心的授权流程             - 如何整合网关组件实现jwt安全验证             - 理解什么是公钥什么是私钥      - 深刻理解授权流程什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?- 服务端保存大量数据,增加服务端压力- 服务端保存用户状态,无法进行水平扩展- 客户端请求依赖服务端,多次请求必须访问同一台服务器。什么是无状态? 微服务集群中的每个服务,对外提供的都是Rest风格的接口。而Rest风格的一个最重要的规范就是:服务的无状态性,即:- 服务端不保存任何客户端请求者信息- 客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份带来的好处是什么呢?- 客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务- 服务端的集群和状态对客户端透明- 服务端可以任意的迁移和伸缩- 减小服务端存储压力

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧