pdf文档有密码怎么解密,winscp输入密码后被拒绝
默认情况下,WINSCP 将用户密码存储在注册表中的以下位置:
默认
HKEY_USERS\SID\Software\Martin Prikryl\WinSCP 2\Sessions\
然而,WinSCP 在WIN7\8 上的默认路径是:
默认
C:\Users\USERNAME\AppData\Local\VirtualStore\Program Files (x86)\WinSCP\WinSCP.ini(64 位操作系统)
C:\Program Files (x86)\WinSCP\WinSCP.ini(64 位操作系统)
C:\Users\USERNAME\AppData\Local\VirtualStore\Program Files\WinSCP\WinSCP.ini(32 位操作系统) - 专注于网络安全2 p% t+ \* j$ r- a
C:\Program Files\WinSCP\WinSCP.ini(32 位操作系统)
这是我记忆中最古老的事情
https://bitbucket.org/knarf/winscppwd/overview/s, u+ I+ P0 n3 m: [
源代码可供下载,编译后的程序可供下载使用。
https://bitbucket.org/knarf/winscppwd/downloads/winscppwd.exe
还有GO语言
https://github.com/anoopengineer/winscppasswd/blob/master/main.go
默认
包主
进口(
“唔。”
“男性”
\'运行\'
“strcon”
)
持续的(
PW_MAGIC=0xA3
PW_FLAG=0xFF
)
函数主() {
args :=os.Args[1:]
如果长度(参数)!=3 {
fmt.Println(\'WinSCP 保存的密码查找器\')
fmt.Println(\'打开regedit 并导航到[HKEY_CURRENT_USER\\Software\\Martin Prikryl\\WinSCP 2\\Sessions] 以获取主机名、用户名和加密密码\n\ ')
如果runtime.GOOS==\'windows\' {
fmt.Println(\'winscppasswd.exe 用法\')
} 除此之外{
fmt.Printf(\'用法./winscppasswd \')
}
返回
}
fmt.Println(解密(args[0], args[1], args[2]))
}
func解密(主机,用户名,密码字符串)字符串{
密钥:=用户名+ 主机
传递字节:=[]byte{}
for i :=0; i len(密码); i++ {
val, _ :=strconv.ParseInt(字符串(密码[i]), 16, 8)
密码=附加(密码,字节(val))
}
var 标志字节
标志,路径字节=dec_next_char(传递字节)
可变长度字节=0
如果标志==PW_FLAG {
_, 密码字节=dec_next_char(密码字节)
长度,路径字节=dec_next_char(路径字节)
} 除此之外{
长度=标志
}
toBeDeleted,密码:=dec_next_char(密码)
passbytes=passbytes[待删除*2:]
清除通行证:=\'\'
变量(
眼睛咬伤
瓦尔字节
)
对于i=0; i 长度; i++ {
val, 传递字节=dec_next_char(传递字节)
清除路径+=字符串(val)
}
如果标志==PW_FLAG {
畅通路径=畅通路径[len(key):]
}
返回畅通的路径
}
func dec_next_char(passbytes []byte) (byte, []byte) {
if len(传递字节)=0 {
0,返回传递字节
}
a :=传递字节[0]
b :=传递字节[1]
密码字节=密码字节[2:]
return ^(((a 4) + b) ^ PW_MAGIC)0xff,传递字节
}
附加Java
https://github.com/YuriMB/WinSCP-密码-恢复/blob/master/src/main/java/Main.java
默认
导入java.util.ArrayList。
导入java.util.List。
/**
* 由Yuri Meiburg 于2015 年4 月30 日创建。
*/
公共类主要{
/**
* ./core/Security.h:#define PWALG_SIMPLE_FLAG0xFF
*/
公共静态最终整数PWALG_SIMPLE_FLAG=0xFF;
/**
* ./core/Security.h:#define PWALG_SIMPLE_MAGIC0xA3
*/
公共静态最终字符PWALG_SIMPLE_MAGIC=0xA3;
公共静态列表fPassword=new ArrayList();
公共静态字符串主机名,用户名。
公共静态无效主(字符串[] args){
if (args.length !=3) {
系统.退出(0);
}
主机名=参数[0];
用户名=参数[1];
for( int i=0; i args[2].length(); ++i){
fPassword.add((char) Integer.parseInt(\'\'+args[2].charAt(i),16));
}
System.out.println(\'用户名=\' + 用户名);
System.out.println(\'主机名=\' + 主机名);
System.out.println(\'getPassword()=\' + getPassword());
}
/**
* UnicodeString __fastcall TSessionData:GetPassword() const
{
return DecryptPassword(FPassword, 用户名+主机名);
}
*/
静态字符串getPassword(){
返回解密密码(f密码,用户名+主机名);
}
/**
* UnicodeString DecryptPassword(RawByteString 密码, UnicodeString UnicodeKey, 整数)
* {
* UTF8String 键=UnicodeKey;
* UTF8字符串结果(\'\');
*整数索引;
* 无符号字符长度、标志;
*
* 标志=simpleDecryptNextChar(密码);
* if (标志==PWALG_SIMPLE_FLAG)
* {
* simpleDecryptNextChar(密码);
* 长度=simpleDecryptNextChar(密码);
* }
* 否则长度=标志;
* 密码.删除(1, ((整数)simpleDecryptNextChar(密码))*2);
* for (索引=0;索引长度;索引++)
* 结果+=(char)simpleDecryptNextChar(密码);
* if (标志==PWALG_SIMPLE_FLAG)
* {
* if (Result.SubString(1, Key.Length()) !=Key) Result=\'\';
* else Result.Delete(1, Key.Length());
* }
* 返回UnicodeString(结果)。
*}
*/
静态字符串解密密码(列出密码,字符串unicodeKey){
System.out.println(\'unicodeKey=\' + unicodeKey);
字符串键=unicodeKey;
字符串结果=\'\';
字符长度、标志。
标志=simpleDecryptNextChar(密码);
System.out.println(\'flag=\' + (int) flag);
如果(标志==PWALG_SIMPLE_FLAG){
/* 虚拟=*/simpleDecryptNextChar(密码);
长度=simpleDecryptNextChar(密码);
}
否则长度=标志;
System.out.println(\'length=\' + (int) length);
int newStart=((int)simpleDecryptNextChar(密码)*2);
System.out.println(\'newStart=\' + newStart + \',password.size()=\'+password.size());
删除项目(密码,0,newStart);
for(int索引=0;索引长度;++index)
结果+=simpleDecryptNextChar(密码);
System.out.println(\'结果=\' + 结果);
如果(标志==PWALG_SIMPLE_FLAG)
{
if (!result.substring(0, key.length()).equals(key)) result=\'\';
否则结果=result.substring(key.length());
}
返回结果。
}
/**
* 无符号字符simpleDecryptNextChar(RawByteString Str)
{
if (Str.Length() 0)
{
无符号字符结果=(无符号字符)
~((((PWALG_SIMPLE_STRING.Pos(Str.c_str()[0])-1) 4) +
((PWALG_SIMPLE_STRING.Pos(Str.c_str()[1])-1) 0)) ^ PWALG_SIMPLE_MAGIC);
删除(1, 2);
返回结果。
}
否则返回0x00。
}
* @参数str
* @返回
*/
静态公共字符simpleDecryptNextChar(列表str){
if(str.size() 0){
字符结果=unsignedChar(
(
(
unsignedChar(str.get(0) 4) + str.get(1) //删除位移溢出位。
) ^ PWALG_SIMPLE_MAGIC
)
);
删除项目(str, 0, 2);
返回结果。
}
否则返回0x00。
}
/**
*任何超过255 的数字都会向下舍入。
* @参数v
* @返回
*/
静态字符unsignedChar(int v){
返回值(字符)(v0xFF);
}
/**
* 从列表中删除项目
*/
静态无效RemoveItems(列表lst,int开始,int结束){
for(int i=0;我
lst.删除(开始);
}
}
}
天地劫幽城再临归真4-5攻略:第四章归真4-5八回合图文通关教学[多图],天地劫幽城再临归真4-5怎么样八回合内通
2024-04-09