我有一个逗号分隔的字符串,可能包含空字段.例如:
1,2,,4
Run Code Online (Sandbox Code Playgroud)
使用基本的
sscanf(string,"%[^,],%[^,],%[^,],%[^,],%[^,]", &val1, &val2, &val3, &val4);
Run Code Online (Sandbox Code Playgroud)
我得到空字段之前的所有值,以及从空字段开始的意外结果.
当我从sscanf()中删除空字段的表达式时,
sscanf(string,"%[^,],%[^,],,%[^,],%[^,]", &val1, &val2, &val3, &val4);
Run Code Online (Sandbox Code Playgroud)
一切都很好.
由于我不知道何时会得到一个空字段,有没有办法重写表达式以优雅地处理空字段?
我想在使用 EC 密钥签署数据期间提供 OpenSSL 特定数据以用作随机种子。我这样做是为了将我的应用程序与另一个参考应用程序(封闭源代码)进行比较。该实用程序将带有私钥的文件、带有要签名的数据的文件和带有随机数据的文件作为参数。
我已经生成了 EC 密钥并签署了数据,但由于没有共同点,因此无法比较这两个应用程序。OpenSSL 生成用于对数据进行签名的随机数据(可能来自 /dev/random),因此每次运行都会给我一个不同的签名。
我试过RAND_clear()与 结合使用RAND_add(),但不断变化的签名。要么我不理解整个 ECDSA 概念,要么我做错了什么。
我比较应用程序的第二个选项是导入公钥并验证参考程序生成的签名。这是更好的选择,但我无法导入给定的示例公钥(83 个字符的十六进制字符串)。EC_POINT_oct2point()一直给我空结果。
任何帮助/指针/参考将不胜感激。
char * key_as_binary_data; //369368AF243193D001E39CE76BB1D5DA08A9BC0A63307AB352338E5EA5C0E05A0C2531866F3E3C2702
int data_size; //Size of the key buffer
EC_POINT * ecpoint = NULL;
EC_GROUP * ecgroup = NULL;
EC_KEY * eckey = NULL;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
eckey = EC_KEY_new();
ecpoint = EC_POINT_new(ecgroup);
ecgroup = EC_GROUP_new_by_curve_name(OBJ_sn2nid("sect163k1"));
EC_GROUP_set_asn1_flag(ecgroup, asn1_flag);
EC_GROUP_set_point_conversion_form(ecgroup, form);
EC_KEY_set_group(eckey,ecgroup);
EC_KEY_generate_key(eckey);
//This gives me a null ecpoint
EC_POINT_oct2point(ecgroup,ecpoint,key_as_binary_data,data_size-1,ctx);
EC_KEY_set_public_key(eckey,ecpoint);
Run Code Online (Sandbox Code Playgroud) 我有一个没有iframe的页面,然后通过JavaScript在点击一个锚点后添加一个iframe.
我遇到的问题是,当我切换到框架时,driver.switch_to_frame(x)我仍然可以找到我的任何内容.
我已经尝试在找到的帧中循环driver.find_elements_by_tag_name('iframe')并检查它们中的每一个我期望找到的类,但没有这样的运气.
driver.switch_to_active_element() 并没有给我正确的iframe.
我不确定iframe内容是否只是无法访问,因为JS DOM更改未反映在Selenium从驱动程序中看到的内容中.我已经为其他iframe完成了同样的过程而没有任何问题,但是这个只是不合作.以下是我正在处理的简化版本.
在JS之前:
<html>
<body>
<a onclick="jsmagic">load iframe</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
JS之后:
<html>
<body>
<iframe><div class='modal'>Message</div></iframe>
<a onclick="jsmagic">load iframe</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Python WebDriver尝试:
driver.switch_to_frame(0)
driver.find_elements_by_class_name('modal')
driver.switch_to_default_content()
Run Code Online (Sandbox Code Playgroud)
我也尝试了类似的变体:
frame = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to_frame(frame)
driver.find_elements_by_class_name('modal')
Run Code Online (Sandbox Code Playgroud)
我尝试使用driver.execute_script该事件来访问该对象,但获取内容超出了我的范围.Firefox控制台命令无法通过Selenium运行.
我有一个应用程序,它生成一个用户密码的哈希值,然后我用它来加密数据.我想将此扩展到这样的情况:在有足够的数据生成该哈希值之前,任何2个用户中的2个需要对应用程序进行身份验证.
我遇到的问题是,无论5个用户中的哪2个用户进行身份验证,我都需要生成完全相同的哈希 - 因为我只使用一个哈希进行加密.
我的主要目标是尽可能保证安全,所以如果还有其他方法可以做同样的事情,请随意提及.我只需要在需要的地方更改代码.
我显然遗漏了一些东西.有人可以解释为什么会这样吗?
#define RANDOM_DEVICE "/dev/random"
int create_shared_secret(char * secret,int size)
{
FILE * file=NULL;
int RetVal;
file=fopen(RANDOM_DEVICE,"r");
if(!file)
{
printf("Unable to open random device %s\n",RANDOM_DEVICE);
exit(-1);
}
RetVal=fread(&secret,1,size,file);
if(RetVal!=size)
{
printf("Problem getting seed value\n");
exit(-1);
}
if(file) fclose(file); //segfault right here
return 0;
}
Run Code Online (Sandbox Code Playgroud)