Security Maven 3密码加密是如何工作的?
我试图理解Maven 3的[密码加密]功能。我发现该功能的文档记录不完整,令人困惑。例如,该功能在几点上相互矛盾 这一问题的范围比其他问题更广,不在本报告的涵盖范围之内 具体来说,我试图回答以下文档中未涉及的问题。我已将迄今为止收集到的信息以斜体显示在每个问题下方Security Maven 3密码加密是如何工作的?,security,maven,encryption,passwords,Security,Maven,Encryption,Passwords,我试图理解Maven 3的[密码加密]功能。我发现该功能的文档记录不完整,令人困惑。例如,该功能在几点上相互矛盾 这一问题的范围比其他问题更广,不在本报告的涵盖范围之内 具体来说,我试图回答以下文档中未涉及的问题。我已将迄今为止收集到的信息以斜体显示在每个问题下方 加密的主密码是否仅通过存在于只有一个用户可以访问的文件夹(~/.m2)中的settings security.xml提供安全性?如果是这样,为什么要麻烦加密“主密码”(为什么不使用一些随机值)?难道“主密码”真的只是加密函数的熵输入吗
~/.m2
)中的settings security.xml
提供安全性?如果是这样,为什么要麻烦加密“主密码”(为什么不使用一些随机值)?难道“主密码”真的只是加密函数的熵输入吗?称之为密码令人困惑-我希望Maven在解密任何加密的服务器密码之前提示我输入此密码,但它没有settings security.xml
文件,您就可以重新生成它。这是否正确
设置security.xml
文件中,即使加密的主密码密文现在不同了,使用一个加密的主密码加密的常规密码仍然有效。有人能解释一下这是如何工作的吗设置.xml
文件中的
标记一起使用。这是真的吗?哪里可以使用设置.xml
中定义的服务器
定义可以在
和
中使用,但不能在
中使用。有人能验证一下吗
对不起,这里有这么多文字,谢谢你的回答。我的回答是基于阅读Maven源代码和做一些研究
settings security.xml
来提供安全性
访问(~/.m2
)?如果是这样的话,为什么还要费心加密“主机”
密码(为什么不使用一些随机值)?“主”不是吗
密码“真的只是加密函数的熵输入吗?
称它为密码是令人困惑的——我希望Maven会提示我输入密码
在对任何加密的服务器密码进行解密之前,请输入此密码,但是
事实并非如此设置security.xml
文件中,偶数
通过加密主机
output ::= '{' base64(packet) '}'
packet ::= salt[8] padlen[1] encrypted[?] padding[padlen]
salt ::= <random>
padlen ::= <length of padding >
padding ::= <random to make packet length a multiple of 16>
sha = sha256( X + salt[8] )
key = sha[0..16]
iv = sha[16..32]
import org.sonatype.plexus.components.cipher.DefaultPlexusCipher;
public class MavenPasswordDecryptor {
public static void main(String[] args) throws Exception {
if (args.length < 1 || args.length > 2 ) {
System.out.println("Usage: java -jar maven-password-decryptor.jar <encrypted-password>");
System.out.println("Usage: java -jar maven-password-decryptor.jar <encrypted-password> <master-password>");
return;
}
DefaultPlexusCipher cipher = new DefaultPlexusCipher();
String encryptedPassword = args[0];
String passPhrase = (args.length == 2 && args[1] != null && !args[1].isEmpty()) ? args[1] : "settings.security";
String result = cipher.decryptDecorated(encryptedPassword, passPhrase);
System.out.println(result);
}
}