2016-06-14 10 views
3

Androidのクライアントの暗号化メッセージ、JavaコードRSA OAEP、Golang復号化、Javaの暗号化

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"); 

byte[] publicBytes = Base64.decode(Configs.PUBLIC_KEY.getBytes("UTF-8"),Base64.DEFAULT); 
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes); 

KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
PublicKey pubKey = keyFactory.generatePublic(keySpec); 

cipher.init(Cipher.ENCRYPT_MODE, pubKey); 

String plaintext = "test"; 

byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes("UTF-8")); 
String chipertext = Base64.encodeToString(encryptedBytes,Base64.DEFAULT); 
Log.d(TAG,"encrypted (chipertext) = " + chipertext); 

Golangサーバーの復号化メッセージ、golangコード

func RsaDecrypt(encryptedString string) (string, error) { 
    base64DecodeBytes, err := base64.StdEncoding.DecodeString(encryptedString) 
    if err != nil { 
     return "", err 
    } 
    privateKeyBlock, _ := pem.Decode([]byte(privateKey)) 
    var pri *rsa.PrivateKey 
    pri, parseErr := x509.ParsePKCS1PrivateKey(privateKeyBlock.Bytes) 
    if parseErr != nil { 
     return "", parseErr 
    } 
    decryptedData, decryptErr := rsa.DecryptOAEP(sha1.New(), rand.Reader, pri, base64DecodeBytes, nil) 
    if decryptErr != nil { 
     return "", decryptErr 
    } 

    return string(decryptedData), nil 
} 

とgolangでエラー:crypto/rsa: decryption error

私はサーバー上のコードを変更できないので、Javaでコードを変更する方法は?

あなたの助けが必要です

Thx。

答えて

1

2つのプログラムのハッシュ関数は同じではありません。 JavaバージョンではSHA-256が使用されますが、GoバージョンではSHA-1が使用されます。

RSA/ECB/OAEPWithSHA-1AndMGF1PaddingをJava側で使用できます。

+0

ありがとうございます! –

関連する問題