我使用以下代码生成加密令牌:
var ticket = new System.Web.Security.FormsAuthenticationTicket(
2,
"",
DateTime.Now,
DateTime.Now.AddMinutes(10),
false,
"user id here");
var cipherText = System.Web.Security.FormsAuthentication.Encrypt(ticket);
Run Code Online (Sandbox Code Playgroud)
此代码使用app/web.config中指定的密钥和算法:
<system.web>
<machineKey validationKey="SOME KEY"
decryptionKey="SOME OTHER KEY"
validation="SHA1" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
现在假设我将生成的密文发送给合作伙伴.他是否有能力强暴:
我想这两个问题的答案都是肯定的,但是他的机会有多现实,你认为给他密码会对我的系统构成安全威胁吗?在此先感谢您的回复.
可能重复:
是否有一个用于iPhone的库可以使用HMAC-SHA-1编码
尝试编写NSString sha1函数,但它返回null
目标C:SHA1
如何在iphone中计算NSString的SHA1?可以使用哪种api?
我有一个数据库,每个密码都通过SHA1传递.有时,我想转到用户仪表板,看看它的感觉.有没有办法,我可以将SHA1转换为普通形式仅用于测试目的?
谢谢
我想为设备创建一个唯一的id,所以我决定创建SHA1(mac XOR时间戳XOR user_password).有没有与此相关的安全问题?做SHA1(mac CONCATENATE timestamp CONCATENATE user_password)会更好吗?
谢谢
我正在考虑使用Data :: UUID Perl模块生成256位对称密钥,以便与HMAC_SHA256算法一起使用.每个调用应该给我一个128位的唯一字符串,所以我想做类似以下的事情:
use Data::UUID;
my $ug = new Data::UUID;
my $uuid1 = $ug->to_hexstring($ug->create());
my $uuid2 = $ug->to_hexstring($ug->create());
my $256_bit_key = $uuid1 . $uuid2;
这个密钥密码强吗?
假设您有一个sha-1算法,它接受文本作为输入而不是字节数组.(例如,有一些像这样的Javascript库).
如果要将sha-1应用于文本(假设文本是密码),则首先执行utf-8编码,因为文本可以包含多字节字符.换句话说,文本中字符的相应整数值可以大于8位字节可以容纳的值.由于sha-1算法适用于8位单元,因此有助于首先在utf-8中对文本进行编码.
我的问题是这样的:当你有一个非文本的二进制数据,其中每个字节的值是0和255之间,你仍然应该做的二进制数据UTF-8编码,你把它传递给了SHA-1算法之前?我知道当值介于0和127之间时,utf-8根本不会修改数据.
但是,如果值介于128和255之间,则UTF-8会修改此类数据.
总之,这是我的问题:包含值255(全1)的字节的SHA-1是什么?
With UTF-8 encoding: 730cf30d408ecf51aad876f5c491f837f7ddea4c
Without UTF-8 encoding: 85e53271e14006f0265921d02d4d736cdc580b0b
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的?
我有一个Go程序
package main
import (
"crypto/hmac"
"crypto/sha1"
"fmt"
)
func main() {
val := []byte("nJ1m4Cc3")
hasher := hmac.New(sha1.New, val)
fmt.Printf("%x\n", hasher.Sum(nil))
// f7c0aebfb7db2c15f1945a6b7b5286d173df894d
}
Run Code Online (Sandbox Code Playgroud)
和Python(2.7)程序试图重现Go代码(使用crypto/hmac
)
import hashlib
val = u'nJ1m4Cc3'
hasher = hashlib.new("sha1", val)
print hasher.hexdigest()
# d67c1f445987c52bceb8d6475c30a8b0e9a3365d
Run Code Online (Sandbox Code Playgroud)
使用该hmac
模块给出了不同的结果,但仍然与Go代码不同.
import hmac
val = 'nJ1m4Cc3'
h = hmac.new("sha1", val)
print h.hexdigest()
# d34435851209e463deeeb40cba7b75ef
Run Code Online (Sandbox Code Playgroud)
为什么这些在同一输入上使用相同的哈希时会打印不同的值?
我编写了一个在haskell中执行SHA-1的程序,虽然它确实产生了哈希,但它们与其他SHA-1程序产生的哈希不匹配
示例:cat
hashes to:b5be86bc8bccfc24b01b093228ebb96fc92fa804
但应该哈希到9d989e8d27dc9e0ec3389fc855f142c3d40f0c50
我的代码是:
(old code omitted)
Run Code Online (Sandbox Code Playgroud)
我不知道出了什么问题.有人能告诉我哪里弄错了吗?
编辑:
我修复了指出的东西,但它仍然无法正常工作.它正常工作直到内循环.我清理了代码,以便为内循环的功能都可以f1
,f2
而f3
cat
现在有趣的哈希来ebe6c9fa1afa0ef5a0ca80bab251fd41cc29127e
.
码:
import Data.Word
import Data.Bits
import Data.Char (ord, intToDigit)
import Data.Binary (encode, decode)
import Numeric (showHex, showIntAtBase)
import System.IO (stdin)
import Data.Sequence ((<|), (|>))
import qualified Data.Sequence as S
import qualified Data.ByteString.Lazy as B
type Quintuple32 = (Word32, Word32, Word32, Word32, Word32)
addQuintuple (a, b, c, d, e) (f, g, h, i, j) =
(a + …
Run Code Online (Sandbox Code Playgroud) 我在dotnet核心中散列字符串时得到奇怪的结果我发现了类似的问题:用ASP.NET Core计算SHA1 并找到了如何在.net核心中将字节数组转换为字符串
这是我的代码:
private static string CalculateSha1(string text)
{
var enc = Encoding.GetEncoding(65001); // utf-8 code page
byte[] buffer = enc.GetBytes(text);
var sha1 = System.Security.Cryptography.SHA1.Create();
var hash = sha1.ComputeHash(buffer);
return enc.GetString(hash);
}
Run Code Online (Sandbox Code Playgroud)
这是我的考验:
string test = "broodjepoep"; // forgive me
string shouldBe = "b2bc870e4ddf0e15486effd19026def2c8a54753"; // according to http://www.sha1-online.com/
string wouldBe = CalculateSha1(test);
System.Diagnostics.Debug.Assert(shouldBe.Equals(wouldBe));
Run Code Online (Sandbox Code Playgroud)
输出:
MHnѐ&ȥGS
我安装了nuget包System.Security.Cryptography.Algorithms
(v 4.3.0)
还试图GetEncoding(0)
获得sys默认编码.也没工作.
无辜地,我认为"SHA1withRSA算法"只是用"SHA1"操作plainText,并使用RSA/pkcs1padding来加密"SHA1"的结果.但是,我发现我错了,直到我写了一些java代码来测试我的想法.我使用RSA publickey来解密签名,我使用相应的私钥来签署"SHA1withRSA算法".但我发现结果不等于"SHA1(plainText)",下面是我的java代码:
String plaintext= "123456";
Signature signature=Signature.getInstance("SHA1withRSA",new BouncyCastleProvider());
signature.initSign(pemPrivatekey);
signature.update(plaintext.getBytes());
byte[] sign = signature.sign();
//RSA decode
byte[] bytes = RsaCipher.decryptByRsa(sign, pemPublickey);
String rsaDecodeHex=Hex.toHexString(bytes);
System.out.println(rsaDecodeHex.toLowerCase());
String sha1Hex = Hash.getSha1(plaintext.getBytes());
System.out.println(sha1Hex);
//rsaDecodeHex!=sha1Hex
Run Code Online (Sandbox Code Playgroud)
很容易找到rsaDecodeHex!=sha1Hex
,在哪里
rsaDecodeHex = 3021300906052b0e03021a050004147c4a8d09ca3762af61e59520943dc26494f8941b
和
sha1Hex = 7c4a8d09ca3762af61e59520943dc26494f8941b.
那么,"SHA1withRSA"的细节是什么?