小编use*_*462的帖子

如何检查某个日期是否通过

我有一个"mm/yyyy"形式的字符串,我想将它与本地系统的日期进行比较.

我想过要在我的月份和日历中的MONTH字段之间使用转换表,例如:

    Calendar cal = Calendar.getInstance();
    String date = "07/2014";
    String month = date.subString(0, 2);
    int monthToCompare;
    if (month.equals("01"))
      monthToCompare = cal.JANUARY;
    if (month.equals("02"))
      monthToCompare = cal.FEBRUARY;
    ...
Run Code Online (Sandbox Code Playgroud)

然后手动比较if.我不喜欢它,因为我觉得这么简单的操作太长了.

我想到的另一个选择是获取当前Date()和使用该 before()方法.这意味着将我的日期转换为日期格式,但是不推荐使用简单的方法,我必须指定毫秒数,我不知道如何轻松地做到这一点(考虑到闰年,日历更正等等)自1970年以来).

java calendar date

15
推荐指数
2
解决办法
3万
查看次数

为什么Python在格式化时将此字符串解释为字典?

我在使用format看起来像Python字典的字符串时遇到问题.

我想生成以下字符串:{"one":1} 如果我尝试这样做:

'{"one":{}}'.format(1)
Run Code Online (Sandbox Code Playgroud)

解释器抛出一个KeyError:

>>> a = '{"one":{}}'.format(1)
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
KeyError: '"one"'
Run Code Online (Sandbox Code Playgroud)

据我所知,这个问题大概在该字符串中包含的事实围绕{,可以用混淆format{}.为什么会发生这种情况,如何解决?

我知道百分比格式,但我想找到一个不涉及开沟的解决方案format().

python string string-formatting python-3.x

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

如何处理 C++ 文件以删除 ifdef 的代码

我继承了一段 C++ 代码,它有许多#ifdef分支来根据平台调整行为(#ifdef __WIN32#ifdef __APPLE__。该代码在当前形式下不可读,因为这些预处理器指令是嵌套的,出现在函数中间,甚至出现在多行语句中间。

我正在寻找一种以某种方式指定一些预处理器标签并获取代码副本的方法,就好像代码已使用这些标志进行了预处理一样。不过,我希望 #include 指令保持不变。例子:

#include <iostream>

#ifdef __APPLE__
std::cout << "This is Apple!" << std::endl;
#elif __WIN32
std::cout << "This is Windows" << std::endl;
#endif
Run Code Online (Sandbox Code Playgroud)

会变成:

#include <iostream>

std::cout << "This is Apple!" << std::endl;
Run Code Online (Sandbox Code Playgroud)

处理后:tool_i_want example.cpp __APPLE__ .

我已经编写了一个快速脚本来执行类似的操作,但我想知道经过更好测试和更彻底的工具。我正在运行 Linux 发行版。

我决定不只运行 C 预处理器,因为如果我没有记错的话,它会扩展头文件,这将使所有内容变得更加难以阅读。

c++ c-preprocessor

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

密钥库/信任库中必须包含什么才能进行相互身份验证?

我正在尝试在 Java 中执行相互身份验证。我试图实现的结构是:具有自签名证书的服务器充当 CA,对客户端证书进行签名。因此,这是我保存在每个密钥库/信任库中的内容:

客户:

密钥库:

  • 客户端的 SSL 密钥对。
  • 服务器签署的证书(与密钥对相关)。

信任库:

  • 服务器的自签名证书。

服务器

密钥库:

  • 服务器的 SSL 密钥对。
  • 自签名证书(与密钥对相关)。

信任库:

  • 服务器的自签名证书。

我能够执行服务器的身份验证,但是当我在服务器上启用 setNeedClientAuth(true) 时,我在日志中收到以下错误:http ://pastebin.com/raw.php?i=P52Qq89z 所以服务器似乎进行了身份验证但是客户端无法提供 CA 链,这可能是其密钥库内容的问题吗?

我使用 openSSL 生成密钥和证书,使用 KeyStore Explorer 创建密钥库(在使用 keytool 几天后不成功)和 JDK 1.7.0_51

更新:问题已按照以下说明解决:https : //stackoverflow.com/a/12150604/2891462 CA 自签名证书的创建方式存在问题(显然只是 JDK 1.7 中的一个问题)。

java ssl keytool x509

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

javax.security.cert.X509Certificate与java.security.cert.X509Certificate之间不兼容

我想验证客户端针对CRL提供的X509证书,看看它是否已被撤销.我已成功实现了一个java.security.cert.X509CRL,但我在检索会话证书时遇到问题:

try {
    SSLSocket s = (SSLSocket) serverSocket.accept();
    s.setSoTimeout(TIMEOUT_RW * 1000);
    s.startHandshake();
    SSLSession session = s.getSession();
    X509Certificate[] cert = session.getPeerCertificateChain();
    if (crl.isRevoked(cert[0])) {
        System.err.println("Attempted to stablish connection using revoked certificate");
    } else {
        ...
    }
} catch (Exception ex) {
    System.err.println("Something went wrong");
}
Run Code Online (Sandbox Code Playgroud)

SSLSession属于javax.net.ssl 包,其方法getPeerCertificateChain()返回一个javax.security.cert.X509Certificate[],无法转换为java.security.cert.X509Certificate[]我需要提供的包java.security.cert.X509CRL.怎么做到呢?

java ssl certificate-revocation x509certificate

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

在Python中保密密钥是安全的

我知道这几个问题已经分别问了几次,而且我发现的大多数答案都是"Python不容易混淆,因为这是语言的本质.如果你真的需要混淆,请使用其他工具"并且"在某些时候你需要权衡"(请参阅如何保护Python代码以及如何保护OAuth使用者的​​安全,以及如何在受到危害时做出反应?).

但是,我刚刚制作了一个小型的Python应用程序,它利用了Twitter的API(因此需要OAuth).OAuth需要消费者秘密,远离用户.应用程序需要该信息,但用户不应轻易访问它.如果无法保护该信息(我将混淆和保护用作同义词,因为我不知道其他任何方式),那么首先为Python提供OAuth API有什么意义呢?

那么问题是:

  • 是否有可能在应用程序中对密码进行硬编码,然后以有效的方式对其进行模糊处理?
  • 如果没有,那么在Python中使用OAuth的最佳方式是什么?我曾想过将加密的消费者秘密与应用程序"运送"并使用硬编码密钥来恢复它,但问题仍然是相同的(如何保护密钥); 让消费者在服务器中保密,并让应用程序在启动时检索它(如果信息是未加密的,那么恶意攻击者更容易使用Wireshark并让消费者对网络流量保密,而不是反编译字节码,我怎么能确保我将这个秘密发送到我的应用程序而不是恶意攻击者?我知道任何形式的身份验证都需要在应用程序端获取秘密信息,问题仍然存在; 两者的混合(让服务器发送加密密钥,与以前一样的问题).基本问题是一样的:如果无法隐藏重要信息,你怎么能有秘密?

我也看过评论说应该对这些关键部分使用C/C++扩展,但我对此一无所知,所以如果这是答案,我会欣赏一些额外的信息.

python security obfuscation oauth

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

混合boost :: optional和std :: unique_ptr

我承认:我爱上了可选的概念.自从我发现它以来,我的代码质量已经提高了很多.明确变量是否有效比明确错误代码和带内信令要好得多.它还让我不必担心必须阅读文档中的合同,或担心它是否是最新的:代码本身就是合同.

也就是说,有时我需要处理std::unique_ptr.此类型的对象可能为null或不为null; 在代码中的给定点,不可能知道是否std::unique_ptr应该有值; 从代码中知道合同是不可能的.

我想以某种方式混合optional(可能与boost::optional)和std::unique_ptr,以便我有一个动态分配的对象具有范围破坏和正确的复制/移动行为,明确表明它可能没有值.这样,我可以使用这种新类型来明确表示需要检查值并避免对plain进行不必要的检查std::unique_ptr.

在C++ 11标准中是否有这样的工具,boost或者是一个足够流行的库?我可以接受为此定义我自己的类,但这将是最不受欢迎的方法(由于缺乏彻底的测试).

c++ optional unique-ptr c++11

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

基于每个目录的条件 gitconfig 不起作用

在我的个人 Ubuntu 机器上,我有一个目录,其中包含我所有的专业项目。我想为他们使用不同的 git 配置(主要是不同的用户名和电子邮件)。这以前似乎有效,但现在不再有效了。

〜/.gitconfig

[user]
    email = personal@email.me
    name = personalname
[core]
    preloadindex = true
    trustctime = false
[includeIf "gitdir:~/professional/"]
    path = ~/professional/gitconfig
Run Code Online (Sandbox Code Playgroud)

〜/专业/gitconfig

[user]
    email = corporate@email.corp
    name = corporatename
[core]
    preloadindex = true
    trustctime = false
Run Code Online (Sandbox Code Playgroud)

每当我启动/克隆 git 存储库时,~/professional我都会在该存储库的配置中设置我的公司名称和电子邮件。对于新存储库来说,情况不再是这样:在git config --list其中执行操作时,不会出现专业配置参数的痕迹;相反,我的个人电子邮件和用户名已设置。我不知道我做了什么(如果有的话)来阻止它工作。


环境

  • Ubuntu 16.04.4 LTS
  • git 版本 2.7.4

git ubuntu-16.04

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

加密/解密的单元测试

我实现了一个非常简单的类,该类Enigma具有一个对称密钥和两个方法:byte[] encryptString(String strToEncrypt)String decryptBytes(byte[] arrayToDecrypt)

我正在尝试为该方法编写一些测试。我已经考虑过测试,加密和解密方法彼此相反,但这并不能单独说明它们。我想按原样使用这些方法来获取一组输入输出,并将其设置为测试(我知道这不是理想的方法,但是这些测试的目的是为了确保该函数在将来能够像它那样运行今天,不是说加密/解密就不错了)。

但是,我不知道如何获取字节数组输出的表示形式,byte[] encryptString(String strToEncrypt)以便可以在测试类中对其进行硬编码。

有任何想法吗?

java junit unit-testing bytearray junit4

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

宏以避免重复的案例值

我在C中使用switch表达式来评估errno变量.根据手册页send():

EAGAIN或EWOULDBLOCK

The socket is marked nonblocking and the requested operation would block.
POSIX.1-2001 allows either error to be returned for this case,and does not
require these constants to have the same value, so a portable application
should check for both possibilities.
Run Code Online (Sandbox Code Playgroud)

由于我的申请必须是便携式的,我必须这样做:

switch (errno):
  case EWOULDBLOCK:
  case EAGAIN:
    //do whatever
    break;
  case EINTR:
    //...
Run Code Online (Sandbox Code Playgroud)

问题是,对于某些平台,EWOULDBLOCK和EAGAIN确实具有相同的值,因此在编译时我得到:

 connection.cxx:190:5: error: duplicate case value
 case EWOULDBLOCK:
 ^
 connection.cxx:189:5: error: previously used here
 case EAGAIN:
 ^
Run Code Online (Sandbox Code Playgroud)

所以我想我可以使用一个宏宏,取决于EWOULDBLOCK和EAGAIN是否具有相同的值,平台将该行添加到代码中或省略它.

有关如何编写该宏的任何想法?

c macros

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