有没有人可以链接到一个可以加密/解密文本的河豚库?
我发现一些.dll用于Windows并使用pinvoke来加密/解密文本,但这些dll不适用于linux(单声道).我希望一个库可以在windows和linux上工作
谢谢.
有一个用PHP编写的应用程序,我将其转换为Ruby.加密密码时,PHP应用程序使用以下代码:
if($method == 2 && CRYPT_BLOWFISH) return crypt($pass, '$2a$07$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxx$');
Run Code Online (Sandbox Code Playgroud)
我假设这是使用Blowfish实现.这里的x都是a-zA-Z0-9字符.
Ruby中的Blowfish实现使用以下语法(取自http://crypt.rubyforge.org/blowfish.html):
blowfish = Crypt::Blowfish.new("A key up to 56 bytes long")
plainBlock = "ABCD1234"
encryptedBlock = blowfish.encrypt_block(plainBlock)
Run Code Online (Sandbox Code Playgroud)
我没有56或更少的字节长字符串,并且不清楚PHP版本应该是什么.那么如何编写一个Ruby函数来加密密码以获得与PHP相同的结果呢?
cipher = Cipher.getInstance("Blowfish");
Run Code Online (Sandbox Code Playgroud)
抛出异常java.security.NoSuchAlgorithmException:找不到Cipher Blowfish实现.
我检查了local_policy.jar和US_export_policy.jar是否存在,并且从安装java时起它们没有更改.什么可能导致这个问题?
编辑:
Object[] o = Security.getAlgorithms("Cipher").toArray();
for (int i=0; i<o.length; i++) {
System.out.println((String)o[i]);
}
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,我得到的列表中没有"Blowfish",但在DES或RSA等算法名称中有一些未知的名称,如"1.2.840.113549.1.1.7"等.为什么那里没有河豚或隐藏在这些数字中?
我正在使用一些使用Blowfish加密文本文件内容的java代码.当我将加密文件转换回来(即解密它)时,字符串从末尾开始缺少一个字符.有什么想法吗?我是Java的新手,并且在没有运气的情况下花了好几个小时.
war_and_peace.txt文件只包含字符串"This is some text".decrypted.txt包含"这是一些tex"(最后没有t).这是java代码:
public static void encrypt(String key, InputStream is, OutputStream os) throws Throwable {
encryptOrDecrypt(key, Cipher.ENCRYPT_MODE, is, os);
}
public static void decrypt(String key, InputStream is, OutputStream os) throws Throwable {
encryptOrDecrypt(key, Cipher.DECRYPT_MODE, is, os);
}
private static byte[] getBytes(String toGet)
{
try
{
byte[] retVal = new byte[toGet.length()];
for (int i = 0; i < toGet.length(); i++)
{
char anychar = toGet.charAt(i);
retVal[i] = (byte)anychar;
}
return retVal;
}catch(Exception e)
{
String errorMsg = "ERROR: getBytes …
Run Code Online (Sandbox Code Playgroud) 我似乎无法找到差异的来源.我在这个在线解密工具中发现了这种差异
http://www.tools4noobs.com/online_tools/decrypt/
我有一些加密的Blowfish数据,我试图通过Python的PyCrypto模块解密.然而,问题是数据似乎是用"blowfish-compat"加密的,因为这是通过在线工具解密它所需要的; 我不能通过PyCrypto的模块解密它,我收集它严格使用Blowfish解密(而不是Blowfish-compat,不管是什么).
有可能以某种方式通过Python解密blowfish-compat吗?我不知道两者之间的区别.
我刚开始学习PHP,我想创建一个登录我最后一年大学项目的网站.我已经读过,在这样的很多地方,河豚是最好的散列方法:openssl_digest vs hash vs hash_hmac?SALT和HMAC之间的区别?
我读到的关于crypt方法的每个地方都包含一个字符串,比如$2y$07$usesomesillystringforsalt$
我的主要问题是:我如何随机生成这个?我已经读过时间戳和mt_rand()不安全的地方.
我也听说AES是最近的首选技术,但从我看来,在PHP中实现它似乎相当棘手!河豚仍然是保护存储密码的可接受方法吗?
按“运行”后我收到此消息:
即将报告钓鱼网站!Google Chrome 已阻止访问 fiddle.jshell.net。该网站已被报告为网络钓鱼网站。网络钓鱼网站旨在通过伪装成您可能信任的其他网站来诱骗您泄露您的登录名、密码或其他敏感信息。了解更多 返回 高级
这是一个屏幕截图:
我使用crypt()来哈希密码,像这样的河豚盐:
[a-zA-Z0-9] $ 2a $,2位数,$,21个字符
在这里我犯了一个错误,在第三个$ 21之后的字符长度不是22.但它工作正常所以我没有找到错误.
它适用于运行Windows和PHP 5.4.4的桌面以及使用php 5.3.x运行Amazon linux的AWS ec2,其中包含太短的盐.
有一天,我将AWS php更新为5.5.14.然后问题发生了.crypt()一直返回*0.
经过一番尝试,我在盐的末尾加了一个$,所以它变成22个字符.它再次工作并返回与以前相同的哈希字符串.虽然它不遵守河豚规则,但字符应为[./a-zA-Z0-9]
但是现在我将这个站点复制到另一台运行openSuSE 13.1和php 5.5.14的机器上,这个盐再次失败了.
我将php降级到5.4.20,但没有帮助.
新站点仍然需要旧数据库,所以我必须使密码哈希工作.
什么是影响此河豚盐长度错误兼容性问题的库或模块?Tt似乎不是PHP的版本.AWS 5.5.14
或者是否有另一个神奇的咒语可以再次救我?我尝试在[./a-zA-Z0-9]中为每个替换尾部$但是没有幸运,哈希字符串是不同的....
在(不太遥远)过去,(在这里工作较长的人)做出的决定总是将数据库ID"加密"到其他东西,即时,只要外部通信需要它.
现在,我们已经从PHP 5.x转移到PHP 7.0用于我们的主应用程序,而我们遍布基础架构的微服务运行7.0或7.1.7.1服务器继续抛出mcrypt的弃用警告.没什么大不了的.但是随着PHP 7.2的到来,我们希望不断更新和升级.麦克莱普正在阻挠.
要在1400个数据库中保存60个表中的所有当前加密值,这是一项艰巨的任务.有没有办法利用OpenSSL,Blowfish和ECB,获得相同的编码和解码值,以使我们陷入虚假的安全感?所有这些都可以让我们远程规划数据库迁移.
基本上,当前加密的值是这样的:
item:13fb7533bf19399ff114468b194ebfaf
这是身份证123
.它通过以下函数来获取此字符串:
$id = 123;
$type = 'item';
$serialized = serialize('' . $id); // To make sure always a string gets put in
$ivSize = mcrypt_create_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND);
$iv = mcrypt_create_iv($ivSize);
$passCrypt = mcrypt_encrypt(MCRYPT_BLOWFISH, $type, $serialized, MCRYPT_MODE_ECB, $iv);
$encoded = bin2hex($passCrypt); // `13fb7533bf19399ff114468b194ebfaf`
$encryptedId = $type . ':' . $encoded;
Run Code Online (Sandbox Code Playgroud)
这给出了最终结果item:13fb7533bf19399ff114468b194ebfaf
.
现在,换句话说:
$encryptedId = 'item:13fb7533bf19399ff114468b194ebfaf';
$type = 'item';
$encryptedIdOnly = substr($encryptedId, strlen($type) + 1); // `13fb...`
$decoded = hex2bin($encryptedIdOnly); …
Run Code Online (Sandbox Code Playgroud) 这个周末,我们的docker映像损坏了,因为它无法再构建了。在查看统计数据时,我看到了这一行:
crypt_blowfish-1.2/crypt.h:17:23: fatal error: gnu-crypt.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
更详细地:
Running setup.py bdist_wheel for cryptacular: started
Running setup.py bdist_wheel for cryptacular: finished with status 'error'
Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-sayd65k0/cryptacular/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmp5734bf55pip-wheel- --python-tag cp36:
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.6
creating build/lib.linux-x86_64-3.6/cryptacular
copying cryptacular/__init__.py -> build/lib.linux-x86_64-3.6/cryptacular
creating build/lib.linux-x86_64-3.6/cryptacular/crypt
copying cryptacular/crypt/test_crypt.py -> build/lib.linux-x86_64-3.6/cryptacular/crypt
copying cryptacular/crypt/__init__.py -> build/lib.linux-x86_64-3.6/cryptacular/crypt
creating build/lib.linux-x86_64-3.6/cryptacular/bcrypt
copying cryptacular/bcrypt/test_bcrypt.py -> build/lib.linux-x86_64-3.6/cryptacular/bcrypt
copying cryptacular/bcrypt/__init__.py …
Run Code Online (Sandbox Code Playgroud)