我正在寻找一种确定的方法来构建生成彩色输出的shell脚本.
不幸的是,我很难找到合适的lib或良好的技术来做到这一点.我发现了很多像有用的,但简单的例子,这个.到目前为止,我发现的最全面的指南就是这个.
在我开始编写自己的库之前,我想检查一下是否有人编写过它
如果您的解决方案不符合下面的观察,那不是问题.我还想阅读它,以便它可以帮助我决定编写我自己的解决方案
我的主要关注/意见:
echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'
实际上重新初始化密码并不是那么慢.由于迭代计数,创建密钥本身很慢.
此外,迭代计数被忽略,并且从未在加密本身中使用,仅用于密钥生成.根据所选择的算法,JCE api有点误导
由于Java中的加密技术非常...加密,我正在努力做一些优化.在功能方面,这个类非常有效,我希望它可以作为AES加密使用的一个例子
使用BouncyCastle的AES实现加密和解密数据时出现性能问题(我不比较,这是我测试过的唯一一个实现).实际上这个问题对于我决定使用的任何密码都是通用的.
主要问题是:我可以避免两个密码完全重新初始化每个加密/解密调用吗?它们太贵了
为简单起见,请记住以下代码已删除其异常处理,并进行了大量简化以保持对问题的关注.同步块用于保证线程安全
顺便说一下,欢迎对代码的任何部分进行反馈
谢谢
import java.nio.charset.Charset;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class AES {
private static final int ITERATIONS = 120000;
private static final int SALT_SIZE_IN_BYTES = 8;
private static final String algorithm = "PBEWithSHA256And128BitAES-CBC-BC";
private static final byte[] KEY_SALT = "a fixed key salt".getBytes(Charset.forName("UTF-8"));
private Cipher encryptCipher;
private Cipher decryptCipher;
private SecretKey key;
private RandomGenerator randomGenerator = new …
Run Code Online (Sandbox Code Playgroud) 关于在macosx上运行的Python 2.7.6的有趣事实:
你有一个非常小的数字,如:
0.000000000000000000001
Run Code Online (Sandbox Code Playgroud)
您可以将其表示为:
>>> 0.1 / (10 ** 20)
1.0000000000000001e-21
Run Code Online (Sandbox Code Playgroud)
但是你可以在最后看到浮动指向错误.我们真正拥有的是这样的:
0.0000000000000000000010000000000000001
Run Code Online (Sandbox Code Playgroud)
所以我们得到了一个错误的数字,但没关系.问题如下:
正如所料:
>>> 0.1 / (10 ** 20) == 0
False
Run Code Online (Sandbox Code Playgroud)
但是,等等,这是什么?
>>> 0.1 / (10 ** 20) + 1 == 1
True
>>> repr(0.1 / (10 ** 20) + 1)
'1.0'
Run Code Online (Sandbox Code Playgroud)
看起来python正在使用另一种数据类型来表示我的数字,因为这只在使用第16个十进制数字时发生,依此类推.另外为什么python决定自动将我的号码转换0
为添加?我不应该使用十进制小部分和浮点错误处理十进制数吗?
我知道这个问题可能落在浮点错误的保护伞中,并且解决方案通常是不信任这种计算的浮点数,但我想了解更多关于发生在幕后的事情.
我跟着这篇文章的大部分内容,目的是在我的软件中实现aes 256加密,它运行得很好
这里的关键点是上面链接中描述的整个实现使用AESEngine类.查看类代码和javadoc引用,AESEngine是128位而不是256位分组密码
搜索代码和文档我找不到192或256位实现.他们在哪儿?
为了完整性,这是我的实际加密类的核心:
private void init(String passphrase) {
try {
String algorithm = "PBEWithSHA256And256BitAES-CBC-BC";
encryptCipher = createCipher();
decryptCipher = createCipher();
randomGenerator = new RandomGenerator();
PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray(), KEY_SALT, ITERATIONS);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(algorithm);
key = keyFactory.generateSecret(keySpec);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("NoSuchAlgorithmException occured while trying to generate the crypto key. This error should never occur, check the application code", e);
} catch (InvalidKeySpecException e) {
throw new RuntimeException("InvalidKeySpecException …
Run Code Online (Sandbox Code Playgroud) 在你有一个N
大小的集合但想要使用单一项目(概念上是一个0 or 1
大小的集合)的问题是很常见的.
我可以写传统的if:
def singular_item(collection):
if collection:
return collection[0]
else:
return None
Run Code Online (Sandbox Code Playgroud)
并简化为:
def singular_item(collection):
return collection[0] if collection else None
Run Code Online (Sandbox Code Playgroud)
但它不适用于iterables,只有定义大小的集合.例如,传递生成器将失败:
singular_item((_ for _ in range(10)))
=> TypeError: 'generator' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)
所以我通常做的是:
def singular_item(collection):
return next((_ for _ in collection), None)
singular_item([1]) -> 1
singular_item([1,2,3]) -> 1
singular_item([]) -> None
Run Code Online (Sandbox Code Playgroud)
这适用于任何集合(或可迭代),但感觉有点笨拙创建一个生成器只获取一个项目.此外,可读性在某种程度上被杀死了:另外两个例子更清楚地表明代码正在尝试做什么.
所以我的问题是:
aes ×2
cryptography ×2
java ×2
python ×2
bouncycastle ×1
colors ×1
generator ×1
linux ×1
macos ×1
performance ×1
salt ×1
shell ×1