问题列表 - 第45789页

CryptoAPI:使用CryptVerifySignature通过公钥验证openssl的签名

我正在尝试将Mac 的AquaticPrime框架移植到Windows.

在Mac上,它使用的是opensll库,我试着理解如何将它移植到Windows,我想在那里我必须使用CryptoAPI.

我主要需要使用给定公钥验证生成的签名的代码.

以下是使用openssl进行验证的方法:

  1. 输入:许可证数据,公钥和签名,长度均为128字节.
  2. SHA1摘要是根据许可证数据计算的.
  3. 使用公钥数据建立RSA上下文
  4. 在给定RSA密钥和签名的情况下调用RSA_public_decrypt(),该签名返回20字节长的SHA1摘要 - 该摘要等于步骤2中的摘要,签名有效.

那么,我如何使用CryptoAPI执行此操作?我到目前为止:

  1. 从CryptAcquireContext开始(ctx,0,0,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT)
  2. 帖子的帮助下使用CryptImportKey ,pubexp = 3,bitlen = 1024.一切正常,即我没有错误,我查看了二进制数据,以验证它是否与MSDN文章显示的相匹配.
  3. 从许可证数据创建SHA1摘要.我检索了生成的20字节哈希值,看到它与Mac上的openssl相匹配.

此时,我打电话给:

CryptVerifySignature (hashHdl, sig, sigLen, keyHdl, 0, 0)
Run Code Online (Sandbox Code Playgroud)

此操作失败,错误代码为ERROR_INVALID_PARAMETER.

奇怪的是,当我第一次意外地将两倍大的公钥存储到PUBLICKEYBLOB结构中时,我收到了一个N​​TE_BAD_SIGNATURE错误.这可能表明我现在传递的公钥是正确的.

为什么现在出现ERROR_INVALID_PARAMETER错误?我已经验证了哈希值是正确的,并且密钥似乎也被接受了.并且"sig"参数只是指向签名的128个字节的指针,而sigLen是128.

那么,我在这里错过了什么?

openssl rsa cryptoapi aquaticprime

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

战略设计模式与抽象工厂模式之间的差异是什么?

有人可以一劳永逸地向我解释这两者之间的区别,并尝试给出一种何时使用它们的指导方针?例子真的很棒.

design-patterns strategy-pattern abstract-factory

5
推荐指数
2
解决办法
4171
查看次数

java密钥库和密码设置

我在java keystores和keytool上有以下问题.我假设密钥库可能有多个证书.正如我所尝试的那样,通过keytool,我可以创建一个密钥库,并且要访问这个密钥库,我必须设置密码.另外,要访问每个证书条目,我必须设置密码.是否必须为密钥库和条目使用相同的密码?如果不是(我认为这样做是合理的)为什么是以下代码:

char[] pwd = new char[]{'s','e','c','r','e','t'};
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream("myPersonal.keystore"), pwd);
kmf.init(ks, pwd);//fails here with exception
Run Code Online (Sandbox Code Playgroud)

给我以下例外?

Exception in thread "main" java.security.UnrecoverableKeyException: Cannot recover key
    at sun.security.provider.KeyProtector.recover(Unknown Source)
    at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source)
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source)
    at java.security.KeyStore.getKey(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

secret是访问myPersonal.keystore我通过keytool创建的密钥库的密码.其中有2个条目,用于证书,1个DSA和1个RSA.每个密码库(以及彼此)都有不同的密码.现在代码是正确的,因为如果我使用一个密钥库,其中一个证书条目具有与密钥库相同的密码,则没有异常,程序运行正常.

那么这里的问题是什么?我不应该有不同的密码?我不应该有很多证书?或者是什么?

java security ssl digital-certificate keytool

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

异步WebClient不是真正的异步?

我在类中创建了一个异步WebClient请求,如下所示:

public class Downstream
    {
        public bool StartDownstream()
        {
            WebClient client = new WebClient();

            client.Headers.Add("user-agent", "Mozilla/4.0 [...]");
            client.Headers.Add("Content-Type","application/x-www-form-urlencoded");
            try
            {

                byte[] postArray = Encoding.UTF8.GetBytes("somevar=foo&someothervar=bar");
                Uri uri = new Uri("http://www.examplesite.com/somepage.php");

                client.UploadDataCompleted += 
                new UploadDataCompletedEventHandler(client_UploadDataCompleted);
                client.UploadDataAsync(uri, postArray);
            }
            catch (WebException e)
            {
                MessageBox.Show("A regular Web Exception");
            }
            catch (NotSupportedException ne)
            {
                MessageBox.Show("A super Web Exception");
            }
            return true;
        }

        void client_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
        {
            MessageBox.Show("The WebClient request completed");
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我创建一个新的类实例并在此处运行该方法:

Downstream Downstream1 = new Downstream();
Downstream1.StartDownstream();
Run Code Online (Sandbox Code Playgroud)

当我这样做时,表单运行的线程似乎挂起,直到WebClient获得响应.为什么是这样?我已经使用过该UploadDataAsync方法,所以它不应该是异步的吗?

编辑: …

c# multithreading asynchronous webclient

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

使用闭包的Javascript Fibonacci

我将使用Javascript编写一些代码.以下是我们要做的事情:

"使用闭包实现javascript Fibonacci数.具体来说,写一个存储两个连续Fibonacci数的函数,最初为0和1.该函数还定义并返回一个嵌套函数getNext().getNext()函数更新两个存储的Fibonacci数接下来的两个Fibonacci数并返回当前的数字.例如,在第一次调用getNext()时,返回值为0,在下一次调用时为1,然后再次为1,然后为2,等等.

我有点理解这一点但不是真的.有人可能会帮忙澄清一下吗?谢谢!

javascript closures fibonacci

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

在.NET中使用整数填充列表的更简单方法

可能重复:
在.NET中填充整数列表

是否有一种更简单或更优雅的方法来初始化C#中的整数列表?

List<int> numberList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)

要么

for(int i = 1; i <= 10; i++)
{
    numberList.Add(i);
}
Run Code Online (Sandbox Code Playgroud)

它似乎不太实际 - 特别是如果列表包含大量值.循环是一个更实用的解决方案吗?

谢谢,

CC

.net c# linq list

95
推荐指数
2
解决办法
7万
查看次数

如何合并两个远程Git分支?

我正在设置一个远程仓库,需要同时存放我的代码的暂存版本和代码的生产版本(每个分支将部署到他们指定的服务器进行测试/生产).

我想只允许将更改从本地计算机推送到远程登台分支,然后当我们确定登台分支是好的时候,我们可以将登台分支合并到生产分支中,然后从那里部署.

基本上,像:

  1. local.branch - > remote.staging
  2. 测试登台服务器
  3. remote.staging - > remote.production
  4. 部署remote.production

是否有可能以这种方式管理远程回购?如果是这样的话?

另外,有更好的方法吗?

git repository

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

php字符串结束标识

如果我有一个名为$ a的php字符串.它可以以k结尾或以k结尾.

如果它以ak结尾,那么我想什么都不做,但如果它不以ak结尾,那么我想将字符串$ b添加到结尾.如何识别字符串$ a结束的内容?

$a=asdk ----> do nothing
$a=asdtt ---->add string $b(=rrk say) to make it $a=asdttrrk
Run Code Online (Sandbox Code Playgroud)

php

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

无法解析颜色值

我试图让我的按钮在按下时改变文本的颜色,但我遇到了一个我无法解决的问题.我收到一条错误,说"无法解析颜色值"然后它给了我文件的路径.这是我正在使用的文件

这个位于资源及其名为button的名为color的新文件夹中

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#ffff0000" />
<item android:state_focused="true" android:color="#ff0000ff" />
<item android:color="#ff000000" />
</selector>
Run Code Online (Sandbox Code Playgroud)

<Button android:text="Main Menu" android:textColor="@color/button"
    android:layout_width="200px" android:id="@+id/mainmenu"
    android:layout_height="55px" android:layout_x="5dip"  
    android:layout_y="174dip"
    android:textSize="18px">
 </Button>
Run Code Online (Sandbox Code Playgroud)

如果有人能帮助我,它会让我发疯

android

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

回发后启动文件下载

在我的应用程序中,我正在为用户构建一个zip文件,以便下载一些导出的数据库信息.当用户单击"生成数据"按钮并在数据库中记录请求时,将创建zip文件.

在我的页面上,我有一个Gridview,它显示用户的下载历史记录,并使他们能够在一段时间内下载最新生成的文件.

我遇到的问题是,当他们点击按钮时,我想要刷新页面(从而刷新gridview并显示他们的最新请求),然后为他们启动文件下载(IE,提示提示并让他们决定是否打开/保存/取消它).

我能够在帖子上开始下载,但我的Gridview在开始之前没有更新,所以它没有显示列表中的最新请求.如何在下载提示开始之前更新gridview?

我正在使用以下内容开始下载:

    public void BeginDownload()
    {
        FileDownload download = InventoryService.GetLastThreeFileDownloads(this.EmployeeId).First();
        FileInfo fi = new FileInfo(Server.MapPath(SERVER_DOWNLOAD_PATH) + download.DownloadFileName);

        Response.Clear();
        Response.ContentType = "application/zip";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + fi.Name);
        Response.TransmitFile(fi.FullName);
        Response.Flush();
    }
Run Code Online (Sandbox Code Playgroud)

如果隐藏字段设置为true(我在单击按钮构建文件时设置),则在Page_Load事件中调用该方法作为最后一项.

我也试过通过jQuery/AJAX调用来刷新页面并开始下载但收效甚微.我已经考虑打开一个模态对话框,让他们点击一个链接开始下载,然后在模态关闭时刷新页面,但如果我找不到另一个解决方案,这是最后的手段.

任何帮助是极大的赞赏!

c# asp.net jquery gridview download

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