V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  dennisge  ›  全部回复第 2 页 / 共 2 页
回复总数  30
1  2  
2017-12-19 23:22:12 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
@zhicheng 望指教
2017-12-19 21:04:10 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
我怀疑是不是 java 支持的带符号整型,而 node 不支持。af350c3413179ab4 。这个是 salt 的 hex 值,java 的 8 个字节有负数,而 node 是不支持的,这个造成了 salt 不一样???
2017-12-19 20:59:48 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
@rrfeng 翻遍了代码哦,不然不会随便问问题的。通读了文档,尝试了很多次,实在没办法,才开问。
2017-12-19 20:58:55 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
@lihongjie0209 解释的很详细。但是我现在就是 java 加密的密码,用相同的盐,结果 node 却解不出来
2017-12-19 20:46:17 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
@Jaylee 没有中文,全是英文的
2017-12-19 20:45:56 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
@sagaxu 请赐教
2017-12-19 20:45:45 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
@mcfog 用 hmac 也不一致
2017-12-19 20:45:18 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
2.node
const old = 'af350c3413179ab479893503e8074330321974fa14dc44f8aa1b3df0';
const origin = 'a123456';
const saltStr = old.substring(0, 16);
const salt = new Buffer(saltStr, 'hex');

const originBuf = new Buffer(origin);
console.log('originBuf>>');
console.log(originBuf);
console.log(originBuf.length);


const encrypt1 = crypto.createHash('sha1')
.update(salt)
.update(originBuf)
.digest('hex');

const encrypt2 = crypto.createHmac('sha1', salt)
.update(originBuf)
.digest('hex');

console.log(encrypt1);
console.log(encrypt2);

=>
originBuf>>
<Buffer 61 31 32 33 34 35 36>
7
e03f07ac2befce638c5886adecbec96a06ce5a51
ab7b28b75346d63105a9bdc5a0365c1967eb132c
2017-12-19 20:41:47 +08:00
回复了 dennisge 创建的主题 Node.js Java 的 sha1 加盐 加密和 node 实现的加密值不一样。
1. 这是原 java 的加密
a123456 => 79893503e8074330321974fa14dc44f8aa1b3df0
plainPassword = StringUtils.trim(plainPassword);
byte[] salt = Digests.generateSalt(SALT_SIZE); // af350c3413179ab4
byte[] hashPassword = Digests.sha1(plainPassword.getBytes(), salt, HASH_INTERATIONS);

private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);

if (salt != null) {
digest.update(salt);
}

byte[] result = digest.digest(input);

for (int i = 1; i < iterations; i++) {
digest.reset();
result = digest.digest(result);
}
return result;
} catch (GeneralSecurityException e) {
throw Exceptions.unchecked(e);
}
}

2. node
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3382 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms · UTC 12:37 · PVG 20:37 · LAX 04:37 · JFK 07:37
Developed with CodeLauncher
♥ Do have faith in what you're doing.