初等数论-第一章

1.1.19 证明: 当$x$是非负整数时,$\lfloor \sqrt{\lfloor x \rfloor} \rfloor = \lfloor \sqrt x \rfloor$。

证明: 不妨设$ x = k^2 + m + \lbrace x \rbrace $,其中$\lbrace x \rbrace$表示$x$的小数部分, $ k^2 < x < (k+1)^2 $,k是正整数。因此$ \lfloor \sqrt{\lfloor x \rfloor} \rfloor = \lfloor \sqrt{\lfloor k^2 + m + \lbrace x \rbrace \rfloor} \rfloor = k $,而且 $ \lfloor \sqrt {x} \rfloor = \lfloor \sqrt{k^2 + m + \lbrace x \rbrace} \rfloor = k$

Continue Reading...

RSA秘钥的PEM格式解析

我们通常所见到的RSA秘钥时,常见的未加密的格式大概就是PEM格式了。这段格式虽然看起来可读,但是实际上也是一段乱码一样的东西。他们一般格式是下面这几种情况:

-----BEGIN PRIVATE KEY-----
YG6XRKfkcxnaXGfFDWHL....
-----END PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
YG6XRKfkcxnaXGfFDWHL....
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
YG6XRKfkcxnaXGfFDWHL....
-----END PRIVATE KEY-----
-----BEGIN RSA PUBLIC KEY-----
YG6XRKfkcxnaXGfFDWHL....
-----END RSA PUBLIC KEY-----

这些格式看起来都是一样的,但是往往这一点点区别可能影响到我们实际读取。很明显,带有PUBLIC的是RSA的公钥,带有PRIVATE的是RSA的私钥。但是带有RSA和不带有RSA其实是有区别的。头部带有RSA,说明该公/私钥就是RSA的秘钥。头部不带有RSA,说明该公/私钥有可能不是RSA的秘钥。这些头部不带有RSA的秘钥,他们的秘钥类型参数在中间的那段乱码中。

Continue Reading...

C++ 字符编码转换方法

与平台相关的方法

Win32

使用 WideCharToMultiByteMultiByteToWideChar

Apple

使用CFStringCreateWithBytes

linux

使用iconv库

Continue Reading...

C++ cout wcout 无法输出与locale的关系

 C++标准为C++标准IO库设计了十分完善的国际化文本处理机制。但在实际使用中,却发现各种编译器对它的支持性存在较大的差异,很多时候无法正确的输出字符。于是我对此进行了深入的调查。

Continue Reading...