我正在寻找Elgamal加密算法的免费实现.据我所知,即使它是一个广为人知的算法,似乎只有两个免费的实现:
OpenSSL,beecrypt,Nettle没有实现Elgamal.
列表中是否还缺少其他免费且经过良好测试的Elgamal实现?
我有一个让我发疯的问题.
我创建了一对键:
$res = openssl_pkey_new(array('private_key_bits' => 2048));
/* Extract the private key from $res to $privKey */
openssl_pkey_export($res, $privKey);
/* Extract the public key from $res to $pubKey */
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
Run Code Online (Sandbox Code Playgroud)
使用此代码,我有$pubKey和$privKey.
我可以正确地加密/解密,但我对DECRYPTION有很大疑问.
目前我的密码数据正在做:
openssl_public_encrypt($data, $encrypted, $pubKey);
Run Code Online (Sandbox Code Playgroud)
它正确加密我的数据,但是阅读PHP Doc,我发现:
http://php.net/manual/en/function.openssl-public-decrypt.php
我可以使用PUBLIC KEY解密数据吗?为什么?
我知道公钥对ENCRYPT数据很有用,但只有私钥的所有者才能解析数据.
如果我可以使用公钥解密数据,那么让知道公钥的用户可以轻松解密这些消息.
有人可以向我解释一下吗?我正在寻找一种方法来使用两个键,第一个是ENCRYPT,第二个(只有第二个)是DECRYPT.
谢谢
是否有任何真正的理由为您自己的电子邮件安全使用第三方证书颁发机构?
(意思是使用S/MIME)
我发现我能够成为我自己的CAuthority并创建我自己的自签名根证书......并且它们可以很好地安装在我的机器和移动设备上.
有没有令人信服的理由使用第三方的付费证书而不是我控制的自己生成和签名的证书?
我一直在想 - 我最信任的人或实体拥有我经过验证的加密电子邮件的权威......是我!...为什么我会让我的实体无法验证到这个通信链? - 如果我发送电子邮件的人是其他认识我并信任我的人......?我为什么要付钱给他们?
我能理解,如果沟通是在我的商业网站与不了解我并且正在交易金钱的不明外界人士之间进行的,那么对于个人电子邮件?家人和知名朋友或共同工作者之间?
还有一些我不了解的关于公钥 - 私钥加密的其他内容,这使得拥有经过验证的大型第三方能够为我提供值得付费的证书吗?
我理解在处理网站上的商务或使用您的安全连接信任网站时,需要SSL第三方验证.但个人之间呢?它看起来与众不同......你个人认识的人更加不同.没有?
security certificate-authority smime public-key-encryption private-key
我在我的项目中使用下面的代码进行加密,一切正常.
RSACryptoServiceProvider x_alg = new RSACryptoServiceProvider( );
// export only the public key
RSAParameters x_public_params = x_alg.ExportParameters(false);
// export the private key
RSAParameters x_private_params = x_alg.ExportParameters(true);
Run Code Online (Sandbox Code Playgroud)
现在客户端更改了要求,并且他希望将所有RSAParameters值存储到配置文件中,并提供以下详细信息用于演示
<project name="netCard Server1">
<key length="256"></key>
<D length="64">00000000000000000000000000000000000000000000000000000000000019C5</D>
<DP length="32">00000000000000000000000000000061</DP>
<DQ length="32">00000000000000000000000000000065</DQ>
<Exponent length="6">000DCD</Exponent>
<InverseQ length="32">0000000000000000000000000000003B</InverseQ>
<Modulus length="64">0000000000000000000000000000000000000000000000000000000000002C95</Modulus>
<P length="32">00000000000000000000000000000065</P>
<Q length="32">00000000000000000000000000000071</Q>
<text length ="64">0123456789ABCDEF111111111111111125FE2222222222222233333333334444</text>
<cipher length ="64">0000000000000000000000000000000000000000000000000000000000000000</cipher>
</project>
Run Code Online (Sandbox Code Playgroud)
现在,问题是当我导入RSAParameters值时,我收到了错误的数据异常
我收到java.security.InvalidKeyException:非法的密钥大小或默认参数,我已经休闲所有必需的步骤,安装Java密码学扩展(JCE)无限强度管辖政策文件.我也已经通过这些线程了
Java.security.InvalidKeyException:非法密钥大小或默认参数错误
但我仍然卡住并得到java.security.InvalidKeyException:非法的密钥大小或默认参数,
下面是我的代码:AESKeyGenerator.java
public class AESKeyGenerator {
private Cipher mCipher;
public AESKeyGenerator()
{
// default constructor
}
public byte[] generate_k(String dhkey, String toEncrypt)
{
byte[] retVal;
try { // Set up the Cipher class of Android to use AES to generate keys
byte[] iv = new byte[16];
for (int i = 0; i < iv.length; i++)
iv[i] = new Byte("0").byteValue();
IvParameterSpec ivspec = new IvParameterSpec(iv);
mCipher = Cipher.getInstance("AES");
// Set up key to use in algorithm
MessageDigest hasher …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
EC_KEY *eckey = EC_KEY_new();
EC_KEY_generate_key(eckey);
const EC_POINT *pub = EC_KEY_get0_public_key(eckey);
printf("%s", pub->X);
Run Code Online (Sandbox Code Playgroud)
我收到一条错误,上面写着"类型'struct ec_point_st'的不完整定义".我也尝试过:
EC_GROUP *curve = EC_GROUP_new_by_curve_name(NID_secp521r1);
BN_CTX *ecctx= BN_CTX_new();
EC_KEY *eckey = EC_KEY_new();
EC_KEY_generate_key(eckey);
const EC_POINT *pub = EC_KEY_get0_public_key(eckey);
NSLog(@"%s", EC_POINT_point2hex(curve, pub, POINT_CONVERSION_HYBRID, ecctx));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到一个EXC_BAD_ACCESS错误.如何打印(用于调试)公钥的x和y点?
openssl cryptography objective-c cryptoapi public-key-encryption
import OpenSSL
key = ...
signature = ...
data = ...
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, key)
OpenSSL.crypto.verify(x509, signature, data, 'sha1')
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能够毫无问题地完成所有这些工作.但是,它并不觉得这是足够的安全性,因为密钥本身是通过URL(我应该信任*)给我的,并且构建签名的方法是公开可用的.
因此,据说密钥被"VeriSign Class 3 Code Signing 2010 CA"验证,有人能告诉我如何检查这是一个有效的声明吗?
我猜我需要在我的机器上本地获得VeriSign证书.假设我这样做,我从那里去哪里?
谢谢!
*URL作为JSON请求中的参数提供给我.当然,URL将是HTTPS,我可以检查域名和所有这些.但似乎我应该对证书本身进行检查
目前我正在使用apache vfs2从sftp下载文件.对于身份验证,我使用用户名和密码.
有没有办法只使用vfs2与public-private-keys和没有密码?
我想我已经使用了这个功能,但是怎么样?将其设置为"是"?
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(options, "no");
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码(片段):
private boolean downloadFile(){
StandardFileSystemManager sysManager = new StandardFileSystemManager();
//download der Datei
try {
sysManager.init();
FileObject localFile = sysManager.resolveFile(localFilePath);
FileObject remoteFile = sysManager.resolveFile(createConnectionString(host, user, password, fileName, port),createDefaultOptions());
//Selectors.SELECT_FILES --> A FileSelector that selects only the base file/folder.
localFile.copyFrom(remoteFile, Selectors.SELECT_FILES);
} catch (Exception e) {
logger.error("Downloading file failed: " + e.toString());
return false;
}finally{
sysManager.close();
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
和
private FileSystemOptions createDefaultOptions() throws FileSystemException{
//create options for sftp
FileSystemOptions options = new FileSystemOptions();
//ssh …Run Code Online (Sandbox Code Playgroud) 我使用http://www-cs-students.stanford.edu/~tjw/jsbn/中的 rsa.js v1.0 来加密浏览器中的ASCII字符串.该字符串实际上是一个16字节的数组,包含一个双倍长度的TripleDes键.使用rsa v1.0,这是有效的.字节数组在服务器上正确解密(使用Bouncy Castle或Thales HSM)作为16字节数组.
例如
var zpk = hex2a("E0F8AD4092F81FC401E60ECB7F5B8F1A");
var rsa = new RSAKey();
rsa.setPublic(modulus, exponent);
var res = rsa.encrypt(zpk);
if (res) {
document.rsatest.zpkrsa.value = hex2b64(res);
}
Run Code Online (Sandbox Code Playgroud)
移动rsa.js v1.4时,这不再适用.Bouncy castle解密数据,但它不是一个16字节的数组,而是一个25字节的数组.
我在rsa.js库中看到的关键区别在于v1.1发行说明:
当PKCS1编码和解码JavaScript字符串时,添加了对非ASCII字符的utf-8编码的支持.
v1.0中的PKCS#1填充是:
// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
function pkcs1pad2(s, n) {
if (n < s.length + 11) {
alert("Message too long for RSA");
return null;
}
var ba = new Array();
var i = …Run Code Online (Sandbox Code Playgroud) javascript encryption cryptography public-key-encryption jsbn
解密时我收到以下错误:
$ eyaml decrypt -s 'ENC and the key goes on here'
Run Code Online (Sandbox Code Playgroud)
.gnupg --quiet --no-secmem-warning --no-permission-warning --no-tty --yes --decrypt) failed with: gpg: Sorry, no terminal at all requested - can't get input
我检查了我的钥匙,一切都井然有序.在这一点上,我没有选择.
cryptography ×3
openssl ×3
java ×2
security ×2
aes ×1
architecture ×1
c# ×1
cryptoapi ×1
elgamal ×1
encryption ×1
gnupg ×1
javascript ×1
jsbn ×1
linux ×1
objective-c ×1
open-source ×1
php ×1
private-key ×1
python ×1
rsa ×1
sftp ×1
smime ×1
snakeyaml ×1
ssl ×1
x509 ×1