我正在编写一个C程序来为RSA生成密钥并将它们写入文件然后从中读取.作业要求我以openssl格式生成文件.所以,我选择了PEM.现在,我有以下创建文件的功能
rsa = RSA_new();
// These 3 keys are generated beforehand
rsa->e = e;
rsa->n = n;
rsa->d = d;
fp = fopen(pubkey_file, "w");
if(!PEM_write_RSAPublicKey(fp, rsa))
{
printf("\n%s\n", "Error writing public key");
}
fflush(fp);
fclose(fp);
fp = fopen(privkey_file, "w");
// pRsaKey = EVP_PKEY_new();
// EVP_PKEY_assign_RSA(pRsaKey, rsa);
if(!PEM_write_RSAPrivateKey(fp, rsa, NULL, 0, 0, NULL, NULL))
// if (!PEM_write_PrivateKey(fp, pRsaKey, NULL, NULL, 0, 0, NULL))
{
printf("\n%s\n", "Error writing private key");
}
fflush(fp);
fclose(fp);
Run Code Online (Sandbox Code Playgroud)
这是读取文件的功能
rsa = RSA_new();
fp = fopen(pubkey_file, "r");
if(PEM_read_RSAPublicKey(fp, …Run Code Online (Sandbox Code Playgroud) 假设我在python中有一个字典,我按值对键进行排序,如下所示
my_dict = {'a':5, 'b':4, 'c':6, 'd':3, 'e':2}
sorted_list = sorted(my_dict, key=my_dict.get)
sorted_list
['e', 'd', 'b', 'a', 'c']
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果我在字典中有冲突(关于值)
my_dict = {'a':5, 'b':4, 'c':5, 'd':3, 'e':2, 'f':4, 'g':3}
sorted_list = sorted(my_dict, key=my_dict.get)
sorted_list
['e', 'd', 'g', 'b', 'f', 'a', 'c']
Run Code Online (Sandbox Code Playgroud)
在我看来,在重复的情况下,列表按字典中的顺序(数字顺序或插入顺序,而不是排序顺序)排序.我可以认为它适用于所有情况吗?
编辑1:我的键将是整数,如果值发生冲突,我希望生成的键按其值排序(最高位)
EDIT2:添加以下参数有助于我的问题.但是,在我的情况下,我希望值以升序排序,但键要按降序排序.下面将导致降序键= lambda x:(x [1],x [0])
我想从python中的字典中获取键的排序列表(我的字典是int到int映射).我希望值按升序排序.但是在碰撞的情况下(相同的值),我希望按键的数值对键进行排序.以下代码就是这样做的
key=lambda x: (dict[x],x)
Run Code Online (Sandbox Code Playgroud)
但是,我希望按降序排序值和键的排序(仅在发生碰撞时)才能降序.我可以应用反向参数,但这将以相同的方式对键及其值起作用.
有没有办法单独做?
例
>>> my_dict = {1:5, 2:4, 3:5, 26:3, 5:2, 6:4, 8:3}
>>> my_dict
{1: 5, 2: 4, 3: 5, 5: 2, 6: 4, 8: 3, 26: 3}
>>> sorted_list = sorted(my_dict, key=my_dict.get)
>>> print sorted_list
[5, 8, 26, 2, 6, 1, 3]
Run Code Online (Sandbox Code Playgroud)
我希望输出为[5,26,8,6,2,3,1]