【发布时间】:2018-11-07 19:01:01
【问题描述】:
一些旧版 Java 使用名为 jasypt 的包来加密密码。
它使用StrongPasswordEncryptor 来加密密码。
似乎在下面使用,来自他们的文档页面
算法:SHA-256。
盐大小:16 字节。
迭代次数:100000。
有源码shows
public StrongPasswordEncryptor() {
super();
this.digester = new StandardStringDigester();
this.digester.setAlgorithm("SHA-256");
this.digester.setIterations(100000);
this.digester.setSaltSizeBytes(16);
this.digester.initialize();
}
现在我们不再使用 Java,我们想继续在 python 中进行相同的加密,但不确定如何移植这部分代码。
我确实有盐和一对纯文本密码和加密密码来验证python端口是否正常工作,只是不知道要加密什么库和什么函数。尝试hashlib.pbkdf2_hmac 没有任何运气。
示例纯文本密码为:Testing123
盐是:0DD2E486FAE5B121491CBE78A9B67AF1
加密密码为:D1JAI76bwIkEkOIy7IZoLasAFKX0Yy7ujU/M7UBezC7NqxSD3clDyaFB1lz96K98
这里是实际加密密码的 Java 代码中的 sn-p:
import javax.inject.Inject;
import javax.inject.Named;
import org.jasypt.util.password.StrongPasswordEncryptor;
import com.foobar.users.PasswordEncoder;
public class PasswordEncoderImpl implements PasswordEncoder {
private String salt;
private StrongPasswordEncryptor encryptor;
@Inject
public PasswordEncoderImpl(@Named("appHash") String appHash) {
this.salt = appHash;
encryptor = new StrongPasswordEncryptor();
}
@Override
public String encode(String password) {
return encryptor.encryptPassword(password + salt);
}
@Override
public boolean verifyPassword(String password, String encryptedPassword){
return encryptor.checkPassword(password+salt, encryptedPassword);
}
}
【问题讨论】:
-
试试看哈希是否匹配?
-
@SLaks 不确定如何在 python 中创建哈希。累了的哈希列表用给定的信息模仿它,但没有运气。也许我应该下载他们的 jar 并通过它,但那是太多的活动部分。
-
算法描述is on the page you linked,为什么不能用这个?
-
@LukeJoshuaPark 我对 Java 和加密都不熟悉。该摘要函数是否布局了它如何加密字符串?
-
@taesu 密码未加密,仅创建加盐哈希(摘要)。要验证密码,您需要按照 Luke 提供的链接创建提供的明文密码和存储盐的摘要。如果它们匹配,则密码也将匹配。每个密码的盐应该是唯一的
标签: java python-3.x encryption sha256 jasypt