小编And*_*rew的帖子

Java正则表达式两个问号(??)

我知道 /?表示/是可选的.所以"玩具?" 将匹配玩具和玩具.我的理解是,如果我把它变得懒惰并使用"玩具??" 我将匹配玩具和玩具,并总是返回玩具.所以,快速测试:

private final static Pattern TEST_PATTERN = Pattern.compile("toys??", Pattern.CASE_INSENSITIVE);
public static void main(String[] args) {
    for(String arg : args) {
        Matcher m = TEST_PATTERN.matcher(arg);
        System.out.print("Arg: " + arg);
        boolean b = false;
        while (m.find()) {
            System.out.print(" {");
            for (int i=0; i<=m.groupCount(); ++i) {
                System.out.print("[" + m.group(i) + "]");
            }
            System.out.print("}");
        }
        System.out.println();
    }
}
Run Code Online (Sandbox Code Playgroud)

是的,它看起来像预期的那样工作

java -cp .. regextest.RegExTest toy toys
Arg: toy {[toy]}
Arg: toys {[toy]}
Run Code Online (Sandbox Code Playgroud)

现在,将正则表达式更改为"toys ?? 2",它仍然匹配toys2和toy2.在这两种情况下,它都会返回整个字符串而不删除s.搜索"玩具?2"和"玩具?? 2"之间是否有任何功能差异.

我问的原因是因为我找到了如下例子:

private final static Pattern TEST_PATTERN …
Run Code Online (Sandbox Code Playgroud)

regex

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

使用BouncyCastle在C#中重新创建密钥(ECPublicKeyParameters)

我生成一个AsymmetricCipherKeyPair,如下所示:

string curveName = "P-521";
X9ECParameters ecP = NistNamedCurves.GetByName(curveName);
ECDomainParameters ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed());
IAsymmetricCipherKeyPairGenerator g = GeneratorUtilities.GetKeyPairGenerator("ECDH");
g.Init(new ECKeyGenerationParameters(ecSpec, new SecureRandom()));
AsymmetricCipherKeyPair aKeyPair = g.GenerateKeyPair();
Run Code Online (Sandbox Code Playgroud)

我的目的是提取公钥和私钥,然后再重建密钥.我首先提取密钥如下:

byte[] privateKey = ((ECPrivateKeyParameters)aKeyPair.Private).D.ToByteArray();
byte[] publicKey = ((ECPublicKeyParameters)aKeyPair.Public).Q.GetEncoded();
Run Code Online (Sandbox Code Playgroud)

如何重新创建公钥和私钥参数以便我可以使用它们?在这个例子中,我重新创建私钥,然后签署数据字节数组.

public static byte[] SignData(byte[] data, byte[] privateKey)
{
    string curveName = "P-521";
    X9ECParameters ecP = NistNamedCurves.GetByName(curveName);
    ECDomainParameters ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed());
    ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
    BigInteger biPrivateKey = new BigInteger(privateKey);
    ECPrivateKeyParameters keyParameters = new ECPrivateKeyParameters(biPrivateKey, ecSpec); …
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle ecdsa

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

标签 统计

bouncycastle ×1

c# ×1

ecdsa ×1

regex ×1