小编dhc*_*cgn的帖子

Microsoft Universal Apps和Unit Testing,AppModel版本存在问题

我开始尝试使用通用应用程序的新解决方案.为了测试我的代码,我想添加一个单元测试项目(Windows Phone 8.1),但如果我这样做,我在开始单元测试时收到此错误消息:

错误:DEP0700:应用程序注册失败.Windows无法安装包808f4bed-6f93-48b9-9b63-071d68456607,因为此程序包需要更高的Windows版本.该软件包请求Windows版本6.3与AppModel版本1,而当前Windows版本为6.3与AppModel版本0.(0x80073cfd)

错误信息

这个AppModel版本1AppModel版本0是什么意思,我该如何解决这个问题?

或者是否存在另一种在Microsoft Universal Apps环境中进行单元测试的方法?

这就是我的项目结构

在此输入图像描述

更新

Windows Phone 8.1项目+ Windows Phone 8.1单元测试=不工作Windows Phone 8项目+ Windows Phone 8单元测试=工作

但我仍然不知道如何让Windows Phone 8.1工作.

顺便说一句我的Windows版本(Windows 8.1更新)

PS C:\Windows\system32> [System.Environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
6      3      9600   0
Run Code Online (Sandbox Code Playgroud)

c# unit-testing windows-phone-8 windows-8.1

19
推荐指数
1
解决办法
3597
查看次数

System.Net.WebRequest和TLS 1.2使用haproxy创建"握手失败"

我无法使用System.Net.WebRequestTLS 1.2的请求.如果我这样做,我会收到异常The request was aborted: Could not create SSL/TLS secure channel.和协议错误Handshake Failure.

通过TLS 1.2连接和身份验证可与Internet Explorer和Chrome配合使用.OpenSSL可以通过TLS 1.2连接到这个端点.

建立

  1. 使用ClientCertificates进行身份验证
  2. 使用非默认端口
  3. 使用TLS 1.2
  4. 端点是haproxy,但这是一个黑盒子
  5. .NET 4.7和C#

代码snipplet

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var req = WebRequest.Create($"https://{host}:{port}");
((HttpWebRequest)req).ClientCertificates = new X509Certificate2Collection(GetCertificate());
var requestStream = req.GetRequestStream();
Run Code Online (Sandbox Code Playgroud)

该方法GetCertificate()返回带有私钥的证书,该私钥嵌入在该软件中.

Wireshark的

wirehark的文本输出按发生顺序排列.

客户你好

Secure Sockets Layer
    TLSv1.2 Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        Version: TLS 1.2 (0x0303)
        Length: 207
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello …
Run Code Online (Sandbox Code Playgroud)

.net httpwebrequest haproxy c#-4.0 tls1.2

7
推荐指数
1
解决办法
1798
查看次数

与 pkcs11interop 一起使用的热门机制 CKM_ECDH1_DERIVE

我买了一个 NitroKey HSM,想用 EC 推导出一个秘密。 以前的问题

为此,我想使用这些CKM_ECDH1_DERIVE机制。此 HSM 支持哪个,请参阅:

参考PKCS#11 规范,必须考虑:

  1. 该机制CKM_ECDH1_DERIVE必须与功能一起使用Derive(页 188)
  2. 该机制CKM_ECDH1_DERIVE需要CK_ECDH1_DERIVE_PARAMS带有以下参数的参数(页 222):
    1. kdf:用于共享秘密值 (CKD) 的密钥派生函数
    2. sharedData : 双方共享的一些数据
    3. publicData : 对方的EC公钥值
  3. 该函数DeriveKey需要以下参数:
    1. 机制 CKM.CKM_ECDH1_DERIVE
    2. 对象句柄私钥
    3. 对象属性 (页 338)
      1. CKA.CKA_CLASS -> CKO.CKO_SECRET_KEY
      2. CKA.CKA_KEY_TYPE -> CKK.CKK_GENERIC_SECRET
      3. 但是“但是,由于这些事实都隐含在机制中,因此无需指定任何一个”,所以这些可以为空?

问题

因此,根据这些信息,我尝试实现一种方法。

但我收到此错误:

Net.Pkcs11Interop.Common.Pkcs11Exception:方法 C_DeriveKey 返回 CKR_TEMPLATE_INCOMPLETE

Session.DeriveKey

说明CKR_TEMPLATE_INCOMPLETE(第 64 页):

如果提供的模板中的属性值,连同任何默认属性值和对象创建函数本身贡献给对象的任何属性值,都不足以完全指定要创建的对象,则尝试应该失败并显示错误代码CKR_TEMPLATE_INCOMPLETE。

和这里(第 98 页)

CKR_TEMPLATE_INCOMPLETE:为创建对象指定的模板不完整,缺少一些必要的属性。有关更多信息,请参阅第 10.1 节。

但我使用了必要的属性:

  1. CKA.CKA_CLASS -> CKO.CKO_SECRET_KEY
  2. CKA.CKA_KEY_TYPE …

elliptic-curve pkcs#11 opensc nitrokey pkcs11interop

5
推荐指数
1
解决办法
1594
查看次数

获取.net core 2.1中的usb存储设备的序列号

如何在.net core 2.1中获取usb存储设备的序列号

我找到了不同的解决方案,但遗憾的是,由于缺乏Windows注册表和.net核心中的wmi,它们无法正常工作.

在Powershell中它非常简单,但我无法在Powershell Core中找到实现.

PS C:\> Get-Disk | Select-Object SerialNumber

SerialNumber
------------
0008_0D02_0021_9852.
Run Code Online (Sandbox Code Playgroud)

我更喜欢在客户端上没有额外安装的解决方案(Win,Linux,Mac).

c# usb-drive .net-core .net-core-2.1

5
推荐指数
1
解决办法
1706
查看次数

我可以将Powershell 4与Powershell 3并排安装吗?

我的盒子上安装了Powershell 3.

我需要使用Powershell 4测试一些脚本,但我想继续运行一些在Powershell 3下测试的脚本,我不想通过安装Powershell 4来破坏某些东西.

问题:尽管我已安装Powershell 4,是否可以在Powershell版本3下打开Powershell会话(如果需要,甚至可以打开2个)?

powershell powershell-2.0 powershell-3.0

3
推荐指数
1
解决办法
3291
查看次数

PSCmdlet动态自动完成一个参数(如Get-Process)

在powershell中,某些参数具有动态自动完成行为.例如,Get-Process参数Name.我可以使用TAB迭代我的所有进程.

Powershell自动完成参数

我想在我的PSCmdlet中使用此行为.

但问题是,我只知道如何使用静态自动完成值来做到这一点.看例子:

public class TableDynamicParameters
{
    [Parameter]
    [ValidateSet("Table1", "Table2")]
    public string[] Tables { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是一个如何使用原生powershell http://blogs.technet.com/b/heyscriptingguy/archive/2014/03/21/use-dynamic-parameters-to-populate-list-of-printer-names完成此操作的示例. ASPX


它适用 于@bouvierr

public string[] Tables { get; set; }

public object GetDynamicParameters()
{
    if (!File.Exists(Path)) return null;

    var tableNames = new List<string>();
    if (TablesCache.ContainsKey(Path))
    {
        tableNames = TablesCache[Path];
    }
    else
    {
        try
        {
            tableNames = DbContext.GetTableNamesContent(Path);
            tableNames.Add("All");
            TablesCache.Add(Path, tableNames);
        }
        catch (Exception e){}
    }

    var runtimeDefinedParameterDictionary = new RuntimeDefinedParameterDictionary();
    runtimeDefinedParameterDictionary.Add("Tables", new RuntimeDefinedParameter("Tables", typeof(String), new Collection<Attribute>() { new …
Run Code Online (Sandbox Code Playgroud)

c# powershell pscmdlet

2
推荐指数
1
解决办法
1702
查看次数

我可以从本地工作站安装Azure文件存储吗?

我想将Azure Files Storage挂载到我的本地Workstation.此时的文档似乎并不清楚.

文件说明

某些Internet服务提供商可能会阻止端口445

似乎证明了这个szenario,但是net usedons不工作localy(Azure VM工作正常).

我收到此错误:

"无法找到网络名称"

文档:https://github.com/Azure/azure-content/blob/master/articles/storage/storage-dotnet-how-to-use-files.md#mount-the-file-share-from-an-本地客户端运行的窗口

编辑:

  • 本地工作站使用Windows 10 Pro运行
  • 命令是net use <drive-letter>: \\<storage-account-name>.file.core.windows.net\<share-name> /u:<storage-account-name> <storage-account-key>它适用于同一区域和订阅中的Azure实例.

编辑2:

它有效,但只有一次!重启后我遇到了同样的问题.针对SMB端口的TCP Ping仅获得了azure vm.

本地工作站

Test-NetConnection -ComputerName SHARENAME.file.core.windows.net -Port 445
TcpTestSucceeded       : False
Run Code Online (Sandbox Code Playgroud)

Azure VM

Test-NetConnection -ComputerName SHARENAME.file.core.windows.net -Port 445
TcpTestSucceeded       : True
Run Code Online (Sandbox Code Playgroud)

看来,我的ISP阻止了端口445.

azure azure-storage azure-storage-blobs azure-table-storage azure-files

2
推荐指数
1
解决办法
4433
查看次数

AES-Encrypt-then-MAC 使用 .NET 的大文件

我想在 .NET 中以最有效的方式加密一个大文件(比如 64 GB)。

我将如何实现这一点:

  1. 创建一个实例AesManaged来加密文件流(读取 64 GB)
  2. 将此流保存到磁盘(因为它太大,无法保存在内存中)(写入 64 GB)
  3. 创建一个实例HMACSHA512来计算保存文件的哈希值(读取 64 GB)
  4. 使用 iv 将加密数据保存到磁盘(读写 64 GB)

简化的 C# 代码:

using (var aesManaged = new AesManaged())
{
    using (var msEncrypt = File.OpenWrite(@"C:\Temp\bigfile.bin.tmp"))
    {
        using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
        {
            File.OpenRead(@"C:\Temp\bigfile.bin").CopyTo(csEncrypt);
            new MemoryStream(iv).CopyTo(csEncrypt);
        }
    }
}

using (var hmac = new HMACSHA512(hmacKey))
{
    hmacHash = hmac.ComputeHash(File.OpenRead(@"C:\Temp\bigfile.bin.tmp"));
}

byte[] headerBytes;
using (var memoryStream = new MemoryStream())
{
    var header = new Header …
Run Code Online (Sandbox Code Playgroud)

c# encryption aes hmac

2
推荐指数
1
解决办法
1555
查看次数

.NET Core ChannelFactory-将X509Certificate2设置为客户端证书

我需要将客户端证书(例如,不是来自Windows证书存储区)设置到我的wcf通道,但是我总是会收到异常:

System.InvalidOperationException:“对象是只读的。”

这很奇怪,因为这些属性都有一个setter,但是如果我分配了X509Certificate2,则会崩溃。

堆栈跟踪

System.InvalidOperationException
  HResult=0x80131509
  Nachricht = Object is read-only.
  Quelle = System.Private.ServiceModel
  Stapelüberwachung:
   at System.ServiceModel.Security.X509CertificateRecipientClientCredential.ThrowIfImmutable()
   at System.ServiceModel.Security.X509CertificateRecipientClientCredential.set_DefaultCertificate(X509Certificate2 value)
Run Code Online (Sandbox Code Playgroud)

var binding = new BasicHttpsBinding();
var endpoint = new EndpointAddress(new Uri("https://myservice.com"));
var channelFactory = new ChannelFactory<MyService>(binding, endpoint);
var serviceClient = channelFactory.CreateChannel();
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

var token = GetToken(); // Just an method that reads a pfx from disk
channelFactory.Credentials.
    ServiceCertificate.DefaultCertificate = token.Certificate; // throws exception
channelFactory.Credentials.
    ClientCertificate.Certificate = token.Certificate; // throws exception too
Run Code Online (Sandbox Code Playgroud)

更新1

该方法SetCertificate引发相同的System.InvalidOperationException: "Object …

c# wcf client-certificates asp.net-core

2
推荐指数
1
解决办法
2206
查看次数

使用 Random 种子时 SecureRandom 是否会减弱?

来自java.util.Randomfor的种子可以java.security.SecureRandom削弱加密强随机数生成器吗?

我看到了这段代码,想知道为什么要以这种特定方式完成。

randomGenerator = new SecureRandom();
final Random rnd = new Random();
randomGenerator.setSeed(rnd.nextLong());
Run Code Online (Sandbox Code Playgroud)

从文档来看,调用setSeed永远不会减少随机性。那么为什么要setSeed调用呢?

public void setSeed(long seed)
使用给定长种子中包含的 8 个字节为该随机对象重新设定种子。给定的种子补充而不是替换现有的种子。因此,保证重复调用永远不会减少随机性。
docs.oracle.com

java random cryptography

2
推荐指数
1
解决办法
63
查看次数

X509Certificate2-如果使用ECC证书,则访问被拒绝异常

我尝试使用加密和解密数据System.Security.Cryptography.Pkcs,但是它仅适用于RSA证书,如果我使用ECC(曲线ECDH_brainpoolP512r1)证书,则构造函数会X509Certificate2崩溃,并带有Access DeniedException。

在Powershell中创建SelfSignedCertificate

New-SelfSignedCertificate `
 -Subject "CN=Test Code Signing RSA" `
 -Type DocumentEncryptionCert `
 -KeyUsage "DigitalSignature" `
 -FriendlyName "Test Code Signing" `
 -NotAfter (get-date).AddYears(5) `
 -KeyExportPolicy Exportable `
 -SmimeCapabilities ` 
 -KeyAlgorithm ECDH_brainpoolP512r1
Run Code Online (Sandbox Code Playgroud)

阅读代码中的SelfSignedCertificate

var base64cert = "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";
new System.Security.Cryptography.X509Certificates.X509Certificate2(Convert.FromBase64String(base64cert), "qwert");
Run Code Online (Sandbox Code Playgroud)

例外

Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: Access Denied
   at Internal.Cryptography.Pal.CertificatePal.FilterPFXStore(Byte[] rawData, SafePasswordHandle password, PfxCertStoreFlags pfxCertStoreFlags)
   at Internal.Cryptography.Pal.CertificatePal.FromBlobOrFile(Byte[] rawData, String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, …
Run Code Online (Sandbox Code Playgroud)

c# elliptic-curve x509certificate2 public-key-encryption pkcs#7

1
推荐指数
1
解决办法
1170
查看次数

如何从 DER 编码的 EC_POINT 中获取 Qx 和 Qy

我在 nitro key hsm 上创建了一个 Brainpool EC,并希望将其用于 .NET Framework 的加密操作,例如System.Security.Cryptography.ECDiffieHellman.

我用pkcs11-tool --list-objects公钥提取但只得到一个值,即 EC_POINT。

那么,如何得到这个点的坐标呢?

DER 编码的 EC_POINT

Public Key Object; EC  EC_POINT 320 bits
  EC_POINT:   0451040defed7988b095679e5aca422382d949c2e7fd937646def25cf7eb5140d41f12d077ac615773952da53efad266c8642c6877b8b215d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598
  EC_PARAMS:  06092b2403030208010109
  label:      Brainpool #1
  ID:         10
  Usage:      verify
Run Code Online (Sandbox Code Playgroud)

解码的 EC_POINT

这个 EC_POINT 是 DER 编码的,我用来提取EC_POINT的真实值

040defed7988b095679e5aca422382d949c2e7fd937646def25cf7
eb5140d41f12d077ac615773952da53efad266c8642c6877b8b215
d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598
Run Code Online (Sandbox Code Playgroud)

(还是这个JS脚本https://lapo.it/asn1js/#0451040DEFED7988B095679E5ACA422382D949C2E7FD937646DEF25CF7EB5140D41F12D077AC615773952DA53EFAD266C8642C6877B8B215D091BA687ACAFD3C33F35FFB5CA6AADAF248EF1A126CD55E0D0598

elliptic-curve pkcs#11 der pkcs#15 nitrokey

0
推荐指数
1
解决办法
1024
查看次数