我正在尝试加密C#客户端和iSeries服务器之间的通信,但遇到了一些问题。我正在尝试使用Diffie Hellman创建共享秘密,但共享秘密不匹配。
我在C#中使用Bouncy Castle,在iSeries上使用QC3*API。步骤是:
数据来回发送的方式是转换成十六进制字符串并在每一端解码。EBCDIC和ASCII之间的转换发生在iSeries上的服务程序中。例如,客户端公钥转换如下:
>
cvtch( %Addr (@clientKey ): %Addr(data4): 128);
eval @clientKey = %Subst( @clientKey: 1: 64);
其中:
data4-十六进制字符串
@clientKey - 64A 接收器可变
服务器密钥通过以下方式转换为十六进制:
> < li>
在服务器上转换为十六进制字符串
cvthc ( %Addr( @serverKeyHex ): %Addr(@serverKey): 128);
eval @serverKeyHex = %Subst(@serverKeyHex: 1: 128);
其中:
@serverKey是64A serverKey
@serverKeyHex是128A接收器变量
将HEX字符串发送到C#客户端
通过将十六进制字符串解释为BigInteger
var server key = new big integer(server hex,16);
所以,共享的秘密是不匹配的,但是我不知道这是否与我如何解释密钥或者发送它们有关。感谢任何建议。
编辑:举一个具体的例子:
对于十六进制为:4F58E1463B66CAAC1BDD35C518A6B76E52E0464E6350B50C87329CFC4C154B8EA07B12AF0E0B9754D5331235805CF59ABE1BB500B4906BD03BCF6C7861E2E8的客户端公钥
EDIT2(更多信息):在iSeries上的API调用(在C中)可以在这个gist:https://gist.github.com/ximenean/a0a9193b776f301997bb中看到
我不知道C#端发生了什么转换,但RPG/MI端正在从字符串转换为字符串。取一个EBCDIC字符串'ABCD'这是一个完全有效的4字节二进制数,以及一个完全有效的4字节字符。在EBCDIC CCSID 37(美国英语)中,此字符串的代码点为x'C1C2C3C4'。
CVTCH将生成以下字符串:“C1C2C3C4”也就是说,它接受一个4字符的字符串并将其“转换”为8字符的字符串。在CCSID 37中,即x'C3F1C3F2C3F3C3F4'。如果您将此字符串发送给在ASCII中解释此字符串的客户端,它的解释将非常不同,因为ASCII的代码点x'C1C2C3C4'是ASCII字符串 'ÁÂÃÄ'
在从IBM端发送之前,您可能希望将其转换为ASCII。“C1C2C3C4”将成为“41424344”等等。
当我想在Java中使用带有BouncyCastle API的RSA加密文件时,我遇到了一个问题。问题如下:在下面的代码中,我在其中创建一个RSAKeyParameters对象的行中,它的构造函数询问我三个参数: 1。如果我们想用公钥或私钥加密 2。具有键的模的BigInteger 3。具有键的指数的BigInteger。 我的方法接收的第一个参数是包含密钥的文件。在RSAKeyParameter的
案例:我正在维护一个Java小程序,它使用BouncyCastle库bcpkix-jdk15on-149。jar和bcprov-jdk15on-149。罐子 问题是小程序在启用JRE版本7\u u40的浏览器上运行时 该行为与版本7\u u25不同,它总是会提示一个模式窗口,如“使用自签名证书的应用程序的安全提示”(无法永久隐藏),只是为了信任bcprov。 https://www.java.co
加密(不工作): “dost't work”的意思是-它返回一个加密的字符串,该字符串绝不是CF加密的字符串的镜像。最重要的是,当使用上述方法解密时,返回的字符串与最初输入的字符串不匹配(使用.NET/BouncyCastle加密)
我目前正在将我的C#AES-GCM密码代码转换为PHP。然而,经过一些研究,我的PHP系统加密的文本不能被C#one解密。我想知道这两种代码是否有区别: C#带弹跳壳: 下面是PHP系统: 有没有人能告诉我,PHP代码中是否有遗漏或不同之处,导致它们的工作方式有所不同?或者PHP函数和BouncyCastle函数之间是否存在某种内部差异,从而使它们有所不同?
问题内容: 我对 密码学还很陌生 ,我正在使用它来 加密 密码并将其存储在数据库中。对于 加密, 我正在使用算法,并且希望对密码加盐以防止再次发生字典攻击。 任何帮助,将不胜感激。 问题答案: 我建议为此使用基于密码的密钥派生函数,而不是基本的哈希函数。像这样:
我对密码学相当陌生,我正在使用加密密码并将其存储在数据库中。对于加密,我使用算法,并且我想对密码加盐,以防止它对字典攻击。 如有任何帮助,我们将不胜感激。