这可能是一个老问题,但我仍然没有找到这个问题的正确答案,所以请耐心等待。我有一个 https 登录页面,它使用表单发布方法并将凭据发送到服务器......等等。
登录时,如果使用IE和F12进行网络监控,点击开始抓包。您可以看到一些类似于 login、servetloginauth(来自 gmail.com)的 URL,并且您可以看到包含您的用户名和密码的请求正文。好吧,可以争辩说,只有当用户没有注销时,您才能看到这一点。
现在注销并且不要关闭浏览器并从任务管理器中获取浏览器转储(任何浏览器,任何版本)(我不知道如何在 Mac 中做同样的事情)。使用 WinHex 编辑器打开转储文件并执行 Search/Find: "password=" 或实际密码(因为您测试了您自己的登录信息,您已经知道您的密码)。您可以以明文形式查看密码。
现在我的问题是,如何屏蔽密码: 1. 在 Post 请求 URL 中 2. 或者当浏览器将我的凭据保存到转储时,我需要对其进行屏蔽/加密或根本不应该保存密码.
我的jsp代码:
<s:form id="login" name="loginForm1" action="login" namespace="/" method="post" enctype="multipart/form-data" >
<fieldset><!-- login fieldset -->
<div><!-- div inside login fieldset -->
<div....
<label for="password" class="loginLabel">Password</label>
<input type="password" name="password" id="password" class="longField nofull absPosition" size="16" autocomplete="off" alt="Password" placeholder="Password" title="Password|<
Run Code Online (Sandbox Code Playgroud)
我目前的解决方案如下,但我不需要太多努力就需要任何替代方案。
如果密码以明文形式发送,则可以从内存中读取密码。使用加盐散列技术进行密码传输将解决此问题。散列是一种密码技术,其中的实际值永远无法恢复。在加盐散列技术中,密码以散列形式存储在数据库中。服务器生成一个随机字符串盐,并将它与登录页面一起发送到客户端。页面上的 JavaScript 代码计算输入密码的哈希值,连接盐并计算整个字符串的哈希值。该值在 POST 请求中发送到服务器。
然后服务器从数据库中检索用户的散列密码,连接相同的盐并计算散列。如果用户输入了正确的密码,这两个哈希值应该匹配。
现在,POST 请求将包含密码的加盐哈希值,而明文密码将不会出现在内存中
SHA 256 是当今可用的强大散列算法 - JavaScript 中的现成实现可用并在“良好阅读”部分引用。
注意:对于包含敏感信息的页面或在数据库中可以修改数据的页面,使用 JavaScript 来刷新浏览器的内存
和图像如下。

另外,我可以解决花旗银行在其网站上为客户所做的事情。我登录了网站并在转储中看到我的用户名被屏蔽了(如网站中所示),我也需要对密码字段执行相同操作的内容。有人可以解释我该怎么做吗?

我正在使用以下代码来执行SHA256.
public static string GenerateSaltedHash(string plainTextString, string saltString)
{
byte[] salt = Encoding.UTF8.GetBytes(saltString);
byte[] plainText = Encoding.UTF8.GetBytes(plainTextString);
HashAlgorithm algorithm = new SHA256Managed();
byte[] plainTextWithSaltBytes =
new byte[plainText.Length + salt.Length];
for (int i = 0; i < plainText.Length; i++)
{
plainTextWithSaltBytes[i] = plainText[i];
}
for (int i = 0; i < salt.Length; i++)
{
plainTextWithSaltBytes[plainText.Length + i] = salt[i];
}
byte[] bytes = algorithm.ComputeHash(plainTextWithSaltBytes);
return Convert.ToBase64String(algorithm.ComputeHash(plainTextWithSaltBytes));
}
Run Code Online (Sandbox Code Playgroud)
由于我使用SHA256,预期结果长度为64.但是我得到了44的结果.问题是什么?44长度输出会影响安全质量吗?
我做了一个Web服务,它在成功验证后返回一个安全令牌.
但是在调试时我注意到webservice返回的每个哈希都以"="结束,例如:
"tINH0JxmryvB6pRkEii1iBYP7FRedDqIEs0Ppbw83oc="
"INv7q72C1HvIixY1qmt5tNASFBEc0PnXRSb780Y5aeI="
"QkM8Kog8TtCczysDmKu6ZOjwwYlcR2biiUzxkb3uBio="
"6eNuCU6RBkwKMmVV6Mhm0Q0ehJ8Qo5SqcGm3LIl62uQ="
"dAPKN8aHl5tgKpmx9vNoYvXfAdF+76G4S+L+ep+TzU="
"O5qQNLEjmmgCIB0TOsNOPCHiquq8ALbHHLcWvWhMuI="
"N9ERYp+i7yhEblAjaKaS3qf9uvMja0odC7ERYllHCI="
"wsBTpxyNLVLbJEbMttFdSfOwv6W9rXba4GGodVVxgo="
"sr+nF83THUjYcjzRVQbnDFUQVTkuZOZYe3D3bmF1D8="
"9EosvgyYOG5a136S54HVmmebwiBJJ8a3qGVWD878j5k="
"8ORZmAXZ4dlWeaMOsyxAFphwKh9SeimwBzf8eYqTis="
"gVepn2Up5rjVplJUvDHtgIeaBL+X6TPzm2j9O2JTDFI="
Run Code Online (Sandbox Code Playgroud)
为什么这样的行为呢?
有关尝试使用SHA1/SHA256进行双重签名时遇到的故障的问题.
我现在已经过了几年SHA256代码签名证书,但在新的一年(2016)之前,我开始使用/ FD SHA256的哈希算法是符合SHA1微软弃用.
这工作正常,但当然签名哈希不会在旧操作系统上验证.我不关心XP,但我仍然关心Vista.
我首先使用以下代码签署SHA1:
signtool sign /fd SHA1 /f "cert.pfx" /p "password" /t http://timestamp.verisign.com/scripts/timsetamp.dll "file"
Run Code Online (Sandbox Code Playgroud)
然后我尝试我的双重签名:
signtool sign /as /fd SHA256 /f "cert.pfx" /p "password" /tr http://timestamp.globalsign.com/?signature=sha2 "file"
Run Code Online (Sandbox Code Playgroud)
而signtool给了我这个:
Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024846/0x80070032)
现在我可以使用单个算法(SHA1或SHA256)成功签名文件,但我无法添加第二个签名.我唯一的猜测是,因为我使用的是两种算法的SAME证书,所以不喜欢这样.我是否需要为每种算法使用不同的物理证书?
只是想知道,因为在新的一年之前,我使用SHA1算法多年来一直使用SHA256证书,并且它在所有操作系统上都经过验证.
我需要在PCL(为Xamarin Forms开发)中生成HMAC-SHA256哈希,它不支持.NET内置的HMAC /加密类,所以我正在使用BouncyCastle来实现我的加密类.
我需要生成HMAC-SHA256哈希,但我无法在Google上找到任何示例,BouncyCastle似乎也没有任何相关文档.谁能帮我吗?
所以我目前正致力于Kraken APIfor 的实现Java.我正在使用我在http://pastebin.com/nHJDAbH8上找到的示例代码.
Kraken(https://www.kraken.com/help/api)描述的一般用法是:
API-Key= API密钥
API-Sign=使用HMAC-SHA512
( URI path + SHA256( nonce + POST data ) )和base64解码的秘密API密钥的消息签名
和
nonce=始终增加无符号64位整数
otp=双因素密码(如果启用了双因子,否则不需要)
但是我面临以下回应:
{"error":["EAPI:Invalid key"]}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种方法(获取新的API,尝试更改sha256方法,因为我认为它的散列方式有问题)
所以这是代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class KrakenClient {
protected static String key = "myAPIKey"; …Run Code Online (Sandbox Code Playgroud) 以前我问了一个关于组合SHA1 + MD5 的问题,但之后我理解计算SHA1然后延迟文件的MD5并不比SHA256快.在我的情况下,4.6 GB文件大约需要10分钟,在Linux系统中使用默认实现SHA256和(C#MONO).
public static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我读了这个主题,并以某种方式根据他们所说的改变我的代码:
public static string GetChecksumBuffered(Stream stream)
{
using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(bufferedStream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有这样的感情,需要大约9分钟.
然后我尝试通过sha256sumLinux中的命令测试我的文件中的相同文件,它需要大约28秒,上面的代码和Linux命令都给出相同的结果!
有人建议我阅读Hash Code和Checksum之间的区别,然后我会谈到这个解释差异的主题.
我的问题是:
是什么导致上述代码和Linux之间的这种不同sha256sum? …
我使用C++ 11(VS2013)编写了一个基于UDP的传输协议.它的速度非常快 - 99.9%的时间都很棒.
但我已经观察过几次将错误的字节写入磁盘(三星250 GB SSD 850 EVO) - 或者至少看起来如此.
这基本上是我转移6GB测试文件时会发生的事情:
在传输完整个文件后,我在服务器和客户端上都对6GB文件进行了完整的SHA256哈希,但令我恐惧的是,我在过去几天观察到两次散列不相同(当进行大约20次测试传输时) ).
在比较Beyond Compare中的文件后,我经常发现在服务器端有一两个位(在6 GB文件中)是错误的.
服务器代码 - 在验证DataPackage哈希后调用
void WriteToFile(long long position, unsigned char * data, int lengthOfData){
boost::lock_guard<std::mutex> guard(filePointerMutex);
//Open if required
if (filePointer == nullptr){
_wfopen_s(&filePointer, (U("\\\\?\\") + AbsoluteFilePathAndName).c_str(), L"wb");
}
//Seek
fsetpos(filePointer, &position);
//Write - not checking the result of the fwrite operation - …Run Code Online (Sandbox Code Playgroud) 到了2017年,如果安全性很重要,那么任何需要使用哈希的人都应该避免使用诸如MD5之类的“破碎”哈希。是否有人找到或创建了一种无需使用VBA或宏即可在Excel中执行更安全的SHA256或SHA512哈希的方法?
过去35,000年前使用MD5就是一个很好的例子(如本SO:不使用VBA的excel中的MD5哈希函数所示)。
避免使用VBA /宏的原因:与移动设备的兼容性,例如iOS的Excel。
旁注:原始的Stack Overflow帖子具有成功的答案,但链接无效,这是供参考的新链接:https : //tzamtzis.gr/2017/web-analytics/excel-function-md5-hashing-without-vba /
我已经使用openssl SHA256和私钥对文件进行了签名,如下所示:
with subprocess.Popen(
# Pipe the signature to openssl to convert it from raw binary encoding to base64 encoding.
# This will prevent any potential corruption due to line ending conversions, and also allows
# a human to read and copy the signature (e.g. for manual verification).
'openssl dgst -sha256 -sign private.key sign_me.zip | openssl base64 > signature.sha256',
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
shell=True,
) as proc:
out, _ = proc.communicate()
Run Code Online (Sandbox Code Playgroud)
signature.sha256并public_key.crt确认sign_me.zip尚未修改。